Space and time information system and method

ABSTRACT

A programming tool and a method of operating the programming tool models an object that moves through time using an object oriented data model. The data model includes a data parameter and a time parameter. An instance of the object oriented data model has a data value associated with the data parameter and a time value associated with the time parameter. The data value is associated with the instance of the item at the time value. A chain of instances of the object oriented data model represents the object as the object moves and changes through time. The programming tool includes a plurality of methods adapted to operate on the chain of instances of the object oriented data model.

FIELD OF THE INVENTION

[0001] The present invention relates generally to object oriented programming and more particularly to a system and method for space and time information.

BACKGROUND OF THE INVENTION

[0002] Existing data modeling systems adequately organize spatial information, but they cannot support temporal data queries. One such system is a Geographic Information System (GIS) package. Previous GIS classified objects for queries in two dimensions—“what” and “where”—storing temporal information as an attribute of the spatial object. Thus, programs cannot index data by time, preventing rapid data queries on temporal parameters. In this approach, change over time can be described qualitatively in a series of maps or snapshots, but not quantitatively. As most data has a time dimension, current GIS packages only allow visualization of half of the picture.

[0003] The lack of spatio-temporal capabilities in GIS is a particular problem for public health applications. Because of the spatial component of disease exposure and spread, GIS provide powerful tools for public health analysis. However, because diseases spread over space and through time, realistic analyses are hindered by existing technology. For instance, time lags between exposure and symptoms of disease are a common occurrence. Yet, time lags cannot be incorporated into current GIS models. Also, people are mobile, so the location where an individual is exposed may not be the same place where the disease is manifested or transmitted.

[0004] The present invention is aimed at one or more of the problems identified above.

SUMMARY OF THE INVENTION AND ADVANTAGES

[0005] In one aspect of the present invention, an object oriented data model for modeling an item using a computer is provided. The object oriented data model includes a data parameter and a time parameter. An instance of the object oriented data model has a data value associated with the data parameter and a time value associated with the time parameter. The data value being associated with the instance of the item at the time value.

[0006] In another aspect of the present invention, a programming tool for modeling an object that moves through time, is provided. The programming tool includes an object oriented data model which includes a data parameter and a time parameter. An instance of the object oriented data model has a data value associated with the data parameter and a time value associated with the time parameter. The data value is associated with the instance of the item at the time value. A chain of instances of the object oriented data model represents the object as the object moves through time. The programming tool includes a plurality of methods adapted to operate on the chain of instances of the object oriented data model.

[0007] In a further aspect of the present invention, a computer based method of modeling items using object oriented data models with space and time data is provided. The method includes the step of representing an item in a first instance of the data model. The data model includes at least one data parameter. A value of the data parameter within the first instance of the data model is associated in time with the first instance. The method includes the step of representing the item in a second instance of the data model. The value of the data parameter tracks a spatial-time event of the item in the second instance of the data model.

BRIEF DESCRIPTION OF THE DRAWINGS

[0008] Other advantages of the present invention will be readily appreciated as the same becomes better understood by reference to the following detailed description when considered in connection with the accompanying drawings wherein:

[0009]FIG. 1 is a block diagram of an object oriented data model for modeling an item using a computer, according to an embodiment of the present invention;

[0010]FIG. 2 is a block diagram of an application programming tool utilizing the object oriented data model of FIG. 1;

[0011]FIG. 3 is a flow diagram of a computer based method for modeling items using object oriented data models with space and time data;

[0012]FIG. 4 is is a block diagram illustrating the relationships of the elements of STroodle and a sample application, STIS-Influenza;

[0013]FIG. 5 is a block diagram of a chain of items utilizing the object oriented data model of FIG. 1;

[0014]FIG. 6 is a block diagram of a chain of items modeling a point;

[0015]FIG. 7 is a block diagram illustrating the relationship between an implementation of the object oriented data model and a geographic information system, according to an embodiment of the present invention; and

[0016]FIG. 8 is a diagrammatic illustration of an unfiltered rectangular query;

[0017]FIG. 9 is a diagrammatic illustration of a targeted query using a filter;

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT

[0018] I. Overview

[0019] With reference to the drawings and in operation, the present invention provides a space and time information system and method. With specific reference to FIG. 1, the system and method utilize an object oriented data model 100 for modeling an item. In one embodiment, the object oriented data model 100 includes a data parameter 102 and a time parameter 104.

[0020] In operation, instances of the object oriented data model 100 have a data value associated with the data parameter 102 and a time value associated with the time parameter 104. The data value is associated with the instance of the item at the time value.

[0021] In one embodiment, the time value is a discrete value. Thus, the value of the data parameter 102 represents the value of the data parameter 102 at the time value. In another embodiment, the time value is a range of time with a start value and an end value. Thus, the value of the data parameter 102 represents the value of the data parameter 102 over the range of time.

[0022] The object oriented data model may be used to model any type of item such as a biological organism, an infectious disease, a business process, or a geometric construct, e.g., points, lines, multi-lines, polygons, or circles.

[0023] The most basic data model can by represented by: (x, y, t a₁, a₂, . . . , a_(N)), where x and y represent geographical coordinates, e.g., latitude and longitude, t is a time point or interval, and a₁, a₂, . . . , a_(N) are attributes observed at the space-time location defined by x, y, t. These attributes may include an object identifier, e.g., a person, their weight, height, disease state, other medical information, etc. . . . However, it should be noted that the data model may also be applied to non-biological systems, including business inventory, e.g., product location and status, management data, e.g., asset distribution, and other business applications. In addition, the data model includes remotely sensed imagery, such as satellites and air-borne platforms. Here x and y correspond to a pixel in an image, t is the time the image was observed, and the attributes are the spectral bands, e.g., corresponding to parts of the electromagnetic spectrum, such as green light, infrared and so on, captures by the sensor.

[0024] With specific reference to FIG. 2, the present invention may be embodied in a programming tool 202 for modeling an object or item 204 that moves through time. Preferably, the programming tool 202 is implemented on a computer 206, such as a personal computer. The programming tool 202 models the object 204 using a chain 208 of instances 210 ₁-210 _(N) of the object oriented data model 100. Each instance 210 ₁-210 _(N) includes an associated data parameter with a data value and an associated time parameter with a time value. The data value is associated with the respective instance 210 ₁-210 _(N) of the item 204 at the time value.

[0025] The chain 208 of instances 210 ₁-210 _(N) of the object oriented data model 100 represents the object 204 as the object 204 moves through time.

[0026] As discussed below, a plurality of methods are adapted to operate on the chain of instances 210 ₁-210 _(N) of the object oriented data model 100.

[0027] In one embodiment, the time value in each instance 210 ₁-210 _(N) of the object oriented data model 100 is a discrete value. In another embodiment, the time value is a range of time with a start value and an end value.

[0028] The item 204 represented by the chain 208 may be representative of both living and non-living things, e.g., biological organisms, geometric constructs, and infectious diseases, as well as items of human commerce as occurs in sales, marketing and business. Examples of geometric constructs includes points, lines, multi-lines, polygons and circles.

[0029] As described below, in a first embodiment the plurality of methods includes spatial queries. For example, spatial queries may include one or more of the following: a length query, area query, position query, point path query, nearest neighbor query, adjacency query, border polygons query, border length query, distance query, overlap query, or polygon containment query.

[0030] As described below, in a second embodiment the plurality of methods includes network queries. For example, network queries may include one or more of the following: a distance query, adjacency query, nearest neighbor query, and neighbors by node query.

[0031] As described below, in a third embodiment the plurality of methods includes spatio-temporal object queries. For example, spatio-temporal object queries may include one or more of the following: an object chain and subject query, a threshold distance query, a minimum distance query, a polygon containment interval query, a distance over time query, a collision query, a close call query, and a distance between objects over time query.

[0032] As described below, in a fourth embodiment, the plurality of methods includes epidemiological queries. Epidemiological queries may include event/diagnosis queries.

[0033] For example, event/diagnosis queries may include one or more of the following: a define event query, a find first event query, a find events in interval query, a nearest events to focus event query, a nearest event to certain time query, a waiting time between pairs of events query, and a waiting time between all events query. For example, epidemiological queries may also include one or more of the following: an exposure time query, a find exposed query, and an epidemic curve query.

[0034] With specific reference to FIG. 3, in one embodiment, the present invention is embodied in a computer based method 300 for modeling items using an object oriented data model with space and time data. The method 300 includes the steps of representing an item in a first instance of the data model 100 (see block 302). The data model 100, as described above, includes at least one data parameter. A value of the data parameter within the first instance of the data model 100 is associated in time with the first instance. In a second block 304, the item is represented in a second instance of the data model 100. The value of the data parameter tracks a spatio-time event of the item in the second instance of the data model 100.

[0035] II. The STroodle Implementation

[0036] A. Overview

[0037] In one embodiment, the present invention is embodied in a programming tool, called “STroodle” for building spatio-temporal analysis applications. While on one level. STroodle extends temporal analysis methods to Geographic Information Systems (GIS), it also opens up new possibilities and applications. Additionally, STroodle was developed especially for public health applications. However, STroodle may be applied to any data that has time considerations. Preferably, the STroodle library can be used as ActiveX Controls or C++ applications.

[0038] In implementation, STroodle adds temporal and spatio-temporal methods to an existing GIS programming library. Objects that move through time and space are treated in STroodle as a chain of spatial objects; each object chain consists of one subobject at each time point. Spatio-temporal methods in STroodle include spatial queries, temporal queries, spatio-temporal queries, and epidemiological queries. Examples of each are listed below.

[0039] Spatial Queries: Length, Area, Position, Point path, Nearest neighbor, Adjacency, Border polygons, Border length, Distance, Overlap, Polygon containment

[0040] Network queries: Distance, Adjacency, Nearest neighbor, Neighbors by node,

[0041] Temporal Queries: Lifespan, View time slice, Interval containment , Interval overlap, Lifespan union, Lifespan intersection, Attributes at time

[0042] Spatio-temporal Object Queries: Object chain and subobject, Threshold distance, Minimum distance, Polygon containment intervals, Distance over time, Collisions, Close calls, Distance between objects over time

[0043] Epidemiological Queries: Exposure time, Find exposed, Epidemic curve

[0044] Event/diagnosis queries: define event, find first event, find events in interval, nearest events to focus event, nearest event to certain time, waiting time between pairs of events, waiting time and distances between pairs of events, between all events

[0045] The STroodle library was written in C++. STroodle functions can be called through an ActiveX Control or as a part of a C++ application using Microsoft Virtual C++ or Metrowerks CodeWarrior. The ActiveX control can be used on Windows 95, 98, and NT operating systems.

[0046] STIS-influenza (see below) was developed using the ActiveX control and runs on Windows machines. The graphics for STIS-Influenza were developed using OpenGL, and the OpenGL dlls are supplied with the installation disk. STIS-Influenza requires a screen resolution of 1024×768 and a Pentium chip with a minimum speed of 120 MHz. The rendering speed will be faster for computers with higher chip speeds and OpenGL-based graphics cards. STIS-Influenza and the ActiveX control are Windows-based, and STroodle is also compatible with CodeWarrior on MacOS.

[0047] STroodle builds on the existing classes and functions of BioMedware's ToodlePip spatial library. For technical information regarding ToodlePip, refer to Technical Appendix B, a listing of the object classes with short descriptions of the functions.

[0048] For easier differentiation of code and description, the following style conventions will be used: Typeface Meaning regular explanatory text underlined bold words defined in the glossary, emphasized when first encountered only sans serif computer code

[0049] The STroodle programming library provides critical new tools for spatio-temporal analysis. Stroodle supports spatio-temporal and epidemiological queries and applies to any data with a temporal dimension. It can be used as written or it can be further customized to fit specialized applications. STroodle was written in C++, though it can also be used as an ActiveX control.

[0050] With reference to FIG. 4, a sample application, STIS-Influenza 400, provides a way to visualize some STroodle queries using the ActiveX control 402 and an example data set on the spread of influenza within a hospital (see below).

[0051] STroodle 404 contains general methods 406 and methods specific to certain fields of interest, or knowledge domains, such as epidemiology 408, exposure assessment 410, environmental sciences 412, and geostatistics 414. The STIS-Influenza application 400 will be described in depth below.

[0052] With reference to FIG. 5, STroodle 404 represents items or objects moving through time and space as chains 502 of subobjects 504. These object chains 502 can describe people, raccoons, mosquitoes, trees, or even structures. Object chains 502 can have time-dependent attributes such as weight, height, disease status, size, etc. These attributes, however, are fixed in the duration of a subobject. While observations on chains occur at a finite number of time points or time intervals, these observations do not have to happen at the same time for all items or objects under scrutiny.

[0053] STroodle 404 can handle observations on objects in two ways-as snapshots in time or as continuous objects. For snapshot-type methods, STroodle 404 can model object chains as a linked list of time point data, with no projections of movement between observations, as shown in FIG. 5. This method restricts analyses of the object to the time points or time intervals recorded. Essentially, the object will disappear between records. The object represented in the chain 502 is a geometric construct 504. The chain stores data at times t=1 to t=5 representing the constructs 504 size, color and position.

[0054] Alternatively, STroodle 404 can model continuous objects, as shown in FIG. 6 This is achieved by creating subobjects with start times equal to the end time of the previous subobject. In one embodiment, movement within an observation interval occurs linearly at a constant speed, but movement may also be modeled between observation intervals in a nonlinear manner. This method can also be used to simulate continuity between discrete observations.

[0055] In FIG. 6, a chain 600 of subobjects or instances(represented by cubes) 602A, 602B, 602C, 602D, 602E represent a point 604 as it moves in time and space. The table below lists the point's 604 coordinates at the beginning of each observation interval. Each cube 602A 602B, 602C, 602D, 602E represents an observation interval, and the object chain 600 is the stack of cubes 602A, 602B, 602C, 602D, 602E. To achieve continuity, each new observation begins at the end of the previous interval. Modeled in this way, the point 604 exists between observation start times (e.g. t=1.5). In this example, only linear movement can occur within an observation period. x y t 2 2 0 5 4 1 2 4 2 2 5 3 6 5 4 3 2 5

[0056] Object chains have certain features. They are single strands that do not break spatially, do not split to create two subobjects at one time point, nor do they join. For example, pregnancy may be handled by having two entities occupy the same location from conception until birth, but at birth their paths diverge. Cellular division is represented by terminating the dividing cell at the moment of division. At division, two daughter cell chains begin. Chains may be two dimensional or multi-dimensional.

[0057] With reference to FIG. 7, in one embodiment STroodle 406 provide temporal capabilities to traditional GIS objects. Preferably, STroodle 406 builds on the ToodlePip GIS library (“ToodlePip”) 700 avilable from the assignee of the present invention, BioMedware. ToodlePip 700 provides comprehensive methods for creating and manipulating spatial objects and constructing queries on sets of these objects. The relationship between ToodlePip 700 and STroodle objects 702 is shown in FIG. 7.

[0058] ToodlePip 700 offers traditional GIS functions such as object management, persistence, computational geometry, proximity relationships, distance between objects, and reprojection. The ancestral ToodlePip classes, SpatialObject 704 and Pt 706 set the basic methods for derived classes 708. SpatialObject 704 contains general GIS methods for customization within each of the derived classes 708, such as PolygonObject 708, MultiLine 710, and PointObject 712. These general methods include distance, length, overlap, reprojection, copying, as well as data saving and retrieval functions. Pt 706 consists of (x,y) coordinates and methods for working with points, including operators and distance functions. Polygons in ToodlePip and STroodle must be simple polygons, i.e. those that do not overlap themselves.

[0059] Derived classes 708 within ToodlePip 700 draw on both SpatialObject 704 and Pt 706. All these classes 708 are types of spatial objects 704, and all classes are made up of point vertices. Thus, the vertices of a PolygonObject 710 or a MultiLine 712, and the coordinates of a PointObject 714 are all individual points and can be manipulated with methods in Pt 706. Within each derived class 708 are methods specific to each type of object, for instance polygons have area while points and lines do not, plus customizations of general SpatialObject methods.

[0060] STroodle classes 702 build on existing ToodlePip classes 700. STroodle 406 uses polygons, lines, and points, but adds the temporal dimension to them. Thus, STroodle objects 702 derive not only from ToodlePip objects 700, but also from a new class of object, TimeSpaceObjects 716. The new STroodle object classes 702 have a “T” at the beginning of their names to signify the temporal dimension and distinguish them from ToodlePip objects 700. Thus, TPolygonObject 718 is a STroodle polygon, descendent from both the ToodlePip PolygonObject 710 and the STroodle TimeSpaceObject 716. This inheritance provides STroodle objects 702 with all the functionality of ToodlePip objects 700, plus temporal methods. The characteristics of TimeSpaceObjects are described below.

[0061] An object or item may be represented as a time-space object 716 with the following characteristics. Optional fields are listed within parentheses. A complete set of objects composes the object chain that represents the individual's movement through time.

[0062] Start Location the location of the entity at the Start Time

[0063] Spatial Extent defines the shape of the object at the first observation.

[0064] Movement Vector defines the distance and direction moved between the Start and Stop Times. For an object that changes shape during the observation interval, movement vectors describe the trajectory of each vertex of the object.

[0065] Start Time the beginning of the time interval when the observation occurred

[0066] (Stop Time) the end of the observation interval, optional because some observations are for timepoints rather than intervals

[0067] Next Object Pointer and Prior Object Pointer identify to the next and prior TimeSpaceObjects in the chain

[0068] Parent Chain identifies the object chain to which the object belongs

[0069] Object chains are linked lists of TimeSpaceObjects 716. Aside from position and shape for each object, object chains have additional characteristics, like the attributes such as name, diagnosis, etc. Object chains have the following characteristics:

[0070] Start Time the start time of the first object in the chain

[0071] End Time the end time of the last object in the chain

[0072] First Object and Last Object point to the first and last objects in the chain

[0073] Attributes the vector of characteristics of the object and their duration

[0074] chain attributes are invariant over the duration of the chain

[0075] object attributes can change states during the chain lifetime, but they cannot have a duration shorter than individual subobjects in the chain

[0076] Alongside the classes that add time information to existing ToodlePip geometry objects, additional classes were required for STroodle 406. These new classes provide the methods for working with object chains and apply general STroodle methods to public health applications.

[0077] Class Chain creates and works with object chains. Object chains consist of a linked list of individual objects. Chain uses the first object in the chain as the pointer to the whole chain, and it holds the vector of object attributes and their duration. This method controls the size of the data files—instead of repeating the list of attributes for each subsequent object in the chain, the list is held in one place.

[0078] In the preferred embodiment, Class TRTree creates and works with Hilbert R-trees to index the data (see below).

[0079] The STIS class serves as an interface between Chain and TRTree. Working with object chains is the foundation of Space-Time Information Systems, hence the acronym STIS. STIS includes functions to save and read data files and queries that evaluate multiple chains.

[0080] For public health applications, STroodle includes class Epidemiology, derived from STIS. Methods in epidemiology allow the user to define an epidemiological event or diagnosis, such as exposure or infection. Then, the event can be tracked through space and time, to find the waiting time between events, the distance between events adjacent in time, and the epidemic curve, or the proportion of susceptible people infected over time. This class applies general methods developed in STIS to epidemiological applications; it exemplifies how programmers can modify existing STroodle classes for their own purposes.

[0081] Geographic files contain an immense amount of information. GIS organize this information in spatial databases. To increase search efficiency, GIS index this information. For example, a search for nearest neighbors of a point is simpler if the data is stored as a linked list of nearest neighbors. Indexing allows the program to prune the query space by searching only some of the records in the database. Current GIS programs offer spatial indexing only. STroodle 406 was created to provide spatio-temporal indexing. In one embodiment, STroodle 406 uses a 3-dimensional Hilbert R-Tree to provide spatio-temporal indexing. Other commonly used data structures may alternatively be used, such as, the quadtree, kD-tree, R-tree, and R⁺-tree. The quadtree and the kD-tree are most appropriate for point data. The R-tree structure (originally proposed by Guttman 1984) can handle more complex objects like lines and polygons. The Hilbert R-tree is a variant of the conventional R-tree. While the R-tree uses minimum bounding rectangles to index queries, the Hilbert R-tree uses a fractal, the Hilbert space-filling curve for indexing. This fractal structure makes the Hilbert R-tree up to 28% better than conventional R-trees and quadtrees in terms of storage required and access time. The Hilbert curve can be constructed for 2, 3 or more dimensions. This efficiency and flexibility makes it especially suitable for spatio-temporal indexing.

[0082] STroodle 406 allows users to refine data queries with filters. Filters can take a variety of forms. All standard mathematical functions and comparisons can be used in the expression (arithmetic operators, sin, cos, log, etc.). There are two types of filters: targeted and nontargeted functions. Both return type Boolean, which allows the filtering of objects that do not meet the specified condition. Nontargeted filter functions evaluate each object in the initial query, while targeted functions evaluate objects in relationship to a specified target. At the level of ActiveX Controls, filters must be specified as a text expression. C++ programmers have additional options, as described below.

[0083] With reference to FIG. 8, an unfiltered rectangular query 800 would return all objects within the rectangle 802, as shown. Such filters could be invoked to return only one type of object, such as infected people, represented as gray dots.

[0084] With reference to FIG. 9 a targeted query using a filter 900 is illustrated. In the illustrated example, an unfiltered nearest neighbor query would return the three closest objects to the target 902 contained in the circular buffer 904. Alternatively, the exemplary filter 900 would return only objects with attributes that differ from the target. For example, one might want to find the closest objects with a different disease status than the target, i.e. susceptible if the target is infected and infective if the target is susceptible. The solid arrows 906 point to the three nearest objects with a different diagnosis.

[0085] Filters are user-defined expressions that restrict queries and customize other STroodle methods. In addition to the mathematical expressions listed in the table below, filters can take object expressions. To specify object expressions, the following syntax must be used. One can use the keywords previous and next to evaluate the previous and next subobjects and the keyword attribute (taking a single integral parameter) to return a character string attribute. Finally isfirst and islast are Boolean functions which return true (1) if the subobject is the first or last subobject in the chain respectively. syntax true if . . . not object.previous.attribute(5)=“k” attribute(5) of the previous object is not “k” object.previous.attribute(5)!=“k” attribute(5) of the previous object is not “k” object.previous.attribute(5)=“s” attribute(5) of the previous object is “s” object.next.attribute(3)=“e” attribute(3) of the next object is “e” object.attribute(1)=“r” attribute(1) of the previous object is “r” object.isfirst object is the first in the chain object.islast object is the last in the chain

[0086] Text expressions are written in this syntax as illustrated in the examples below.

[0087] nontargeted filters

[0088] object.attribute(2)==“infected” and (object.isfirst or object.previous.attribute(2) !=“infected”)

[0089] This expression returns true if a subobject is the first in its chain to be infected, (or is infected and is the first subobject in the chain). As a filter this expression would filter out all objects except those just infected.

[0090] SUBSTR(object.attribute(1), “Nurse”)

[0091] Returns true if the object's first attribute contains the word “Nurse”.

[0092] targeted filters

[0093] target. attribute(1) !=neighbor.attribute(1)

[0094] Returns true if the target object's first attribute differs from the neighbor object's first attribute.

[0095] Available mathematical functions code arguments description + 2 plus − 2 minus * 2 multiplication 2 multiplication (nothing need be specified) / 2 division abs 1 absolute value acos 1 arccosine asin 1 arcsine atan 1 arctangent atan 1 arc hyperbolic tangent h cos 1 cosine cosh 1 hyperbolic cosine exp 1 exponent (e^(x)) log 1 natural log (ln) log1 1 log (base 10) 0 mod 2 modulus or remainder function (x mod y) pow 2 power (x^(y)) sin 1 sine sinh 1 hyperbolic sine sqrt 1 squareroot tan 1 tangent tanh 1 hyperbolic tangent max 2 maximum, returns maximum of two arguments min 2 minimum, returns minimum of two arguments subs 2 true if second string tr argument occurs anywhere in the first

[0096] B. C++ filters

[0097] STroodle 406 provides two ways to create filters for C++ queries: formula objects and FilterFunctions. The class formula has a single constructor that takes a C string holding a filter expression. This expression is the same form as the text expression described above. FilterFunctions are hard-coded C++ functions. Because they are not hard-coded, formulas can be defined in real time but execute more slowly.

[0098] Most of the query functions in STroodle take as parameters both a pointer to a FilterFunction and a pointer to a formula object. Only one of the two should be specified in a given query. If not specified, these parameters have a default value of NULL.

[0099] Filter functions come in two forms—the nontargeted FilterFunction or the targeted FilterFunction2. These functions compare chain or object attributes. As FilterFunction evaluates the attributes of one object, it takes one pointer. FilterFunction2 compares two objects, and it takes a pointer for the target and the neighbor. Because attributes can come in three formats, double, long, and character string, STroodle defines several attribute structures. attributeTag is a struct that contains the requested attribute, e.g. attribute(1), in the following format: struct attributeTag {double d; long 1; string s;}.

[0100] An individual attribute contains only one format, so only one of the three types will be defined. This method allows for general filter functions to be written that do not require a specific attribute type.

[0101] Other important attribute-related structures are attributeSpan and attribute. attributeSpan returns the duration of a particular attribute. This quantity is undefined for chain attributes, which are invariant over time.

[0102] struct attributeSpan { TimeSpaceObject *startObject, *endObject; double GetStartTime(); double GetlEndTime(); };

[0103] attribute contains two vectors, the attribute states and the duration of each.

[0104] struct attribute   { enum attTypeTag {chain, object} attType; enum dataTypeTag {doubleType, longType, stringType} dataType; vector<attributeTag> states; vector<attributeSpan> intervals; };

[0105] C++ nontargeted filter example 1

[0106] Here a filter function is defined that determines whether an object has just been infected. This function finds the part of a chain where a patient first becomes infected by comparing the states (whether Attribute(2)=“infected”) of adjacent objects in the object chain representing the patient. For objects without prior objects, i.e. the first object in a chain, the function returns true if infected. It can be defined as a FilterFunction

[0107] bool justInfected(const TimeSpaceObject *obj) {  attributeTag tag = obj−>GetAttribute(2);  if (tag.s != “infected”) return false;   // attribute 2 is a string so use “.s”  const TimeSpaceObject *prevObj = obj−>GetPreviousObject();  if (prevObj)   {   attributeTag tag2 = prevObj−>GetAttribute(2);   // if previous object's attribute isn't “infected” the current one's the first   return (tag2.s != “infected”);  }   return true; // first subobject in chain is infected }

[0108] or as a formula

[0109] formula justInfectedForm(“object. attribute(2)==\“infected\” and \ (object.isfirst or object.previous.attribute(2) !=\“infected\”)”, formula::nontargeted);

[0110] Once it is defined, the filter can be passed to a query function. For example, to add a filter to the query function FindNearestObject, declared as

[0111] FindNearestObject(double x, double y, double t, formula *form=NULL, FilterFunction func=NULL),

[0112] a filter to find the nearest just-infected objects could be specified in one of two ways

[0113] FindNearestObject(double x, double y, double t, NULL, justInfected)

[0114] OR

[0115] FindNearestObject(double x, double y, double t, justInfectedForm)

[0116] C++ nontargeted filter example 2

[0117] Below is a filter function defined that determines whether an object chain is a nurse. This function searches within the first attribute (holding the chain's name) for any occurrence of the substring “Nurse”.

[0118] It can be defined as a FilterFunction:

[0119] bool nurseFilter(const TimeSpaceObject *obj) {  attributeTag tag = obj−>GetAttribute(0);  string name = tag.s;  // find returns the position of “Nurse” or the end position if not found:  return (name.find(“Nurse”) < name.size()); }

[0120] or as a formula:

[0121] formula onlyNurses(“SUBSTR(object. attribute(1), \“Nurse\”)”, formula::nontargeted);

[0122] Once it is defined, the filter can be used within a query. For FindNearestObject, declared above:

[0123] FindNearestObject(double x, double y, double t, NULL, nurseFilter)

[0124] OR

[0125] FindNearestObject(double x, double y, double t, *onlynurses)

[0126] Unfiltered, FindNearestObject returns the object nearest to a set of spatio-temporal coordinates (x,y,t). When filtered in this way, it returns the nearest nurse.

[0127] C++ targeted filter example

[0128] The following example defines a targeted filter that returns true if two compared objects have different health states, in this case the value in the Attribute(1) field. It could be achieved using a FilterFunction2:

[0129] bool differentStates(const TimeSpaceObject *obj 1, const TimeSpaceObject *obj2) {  attributeTag tag = obj1−>GetAttribute(1);  attributeTag tag2 = obj2−>GetAttribute(1);  return tag.s != tag2.s;  // attribute 1 is a string }

[0130] or a formula:

[0131] formula diffStates(“target.attribute(1) !=neighbor.attribute(1)”, formula::targeted),

[0132] Once defined, it could be specified in a query taking FilterFunction2, such as one that returns the minimum distance between two objects:

[0133] FindNearestToObject(Chain *obj, double t, formula *form=NULL, FilterFunction2 func=NULL)

[0134] can be specified as

[0135] FindNearestToObject(Chain *obj, double t, NULL, differentStates)

[0136] OR

[0137] FindNearestToObject(Chain *obj, double t, *diffstates)

[0138] Unfiltered, FindNearestToObject returns the nearest object to the specified chain at time t. Filtered as above, the object returned is the nearest object with a different first attribute.

[0139] D. Queries

[0140] 1. Data Management

[0141] Initialize WM_QRY_INITIALIZE

[0142] description: initializes the internal data structures input: none

[0143] returns: nothing

[0144] Read File WM_QRY_READFILE

[0145] description: read a disk file of time-space objects

[0146] input: name of file

[0147] returns: nothing

[0148] Finish WM_QRY_FINISH

[0149] description: destroy the internal data structures

[0150] input: none

[0151] returns: nothing

[0152] Bounds WM_QRY_BOUNDS

[0153] description: gets the bounds of the data set.

[0154] input: none.

[0155] returns: xmin, xmax, ymin, ymax, start time, end time (6 doubles).

[0156] 2. Identify chains, objects, and attributes

[0157] All Objects WM_QRY_OTHER_ALLOBJECTS

[0158] description: gets the ids of all the objects.

[0159] input: nontargeted filter: char string

[0160] returns: object Ids: longs

[0161] Sub-Object in Chain WM_QRY OTHER_SUBOBJECTINCHAIN

[0162] description: finds the sub-object in an object chain which exists at a specified time

[0163] input: object Id: 1 long

[0164] time: 1 double

[0165] returns: sub-object Id: 1 long

[0166] Object Chain from Sub-Object WM_QRY_OTHER_CHAINFROMSUBOBJECT

[0167] description: finds the object chain containing the specified sub-object

[0168] input: sub-object Id: 1 long

[0169] returns: object chain Id: 1 long

[0170] Preceding Sub-Object WM—QRY_OTHER_PRECEDINGSUBOBJECT

[0171] description: returns the sub-object preceding the specified sub-object in time

[0172] input: sub-object Id: 1 long

[0173] returns: sub-object Id: 1 long

[0174] note: an Id of 0 is returned if there is no preceding sub-object.

[0175] Following Sub-Object WM_QRY_OTHER_FOLLOWINGSUBOBJECT

[0176] description: returns the sub-object following the specified sub-object in time

[0177] input: sub-object Id: 1 long

[0178] returns: sub-object Id: 1 long

[0179] note: an Id of 0 is returned if there is no following sub-object.

[0180] Sub-Object Attribute WM_QRY_OTHER_SUBOBJECTATTRIBUTE

[0181] description: retrieves the value of the specified attribute of a sub-object

[0182] input: id of the object: 1 long

[0183] attribute index: 1 long

[0184] returns: attribute: character string

[0185] Sub-Object Lifespan WM_QRY_OTHER_SUBOBJECTLIFESPAN

[0186] description: returns the time interval when a sub-object is in existence

[0187] input: sub-object Id: 1 long

[0188] returns: time interval, [t1,t2]: 1 pair of doubles

[0189] 3. Spatial Queries

[0190] Nearest Neighbor to Point WM_QRY_SPACE_NEIGHBORPOINT

[0191] description: finds the nearest neighbors to a point at a specified time

[0192] input: query point, (x,y): 2 doubles

[0193] query time: 1 double

[0194] number of neighbors: 1 long

[0195] nontargeted filter: char string (defined p. 16)

[0196] returns: neighbor Id's: longs

[0197] array of distances to neighbors: doubles

[0198] Nearest Neighbor to Object WM_QRY_SPACE_NEIGHBOROBJECT

[0199] description: finds the nearest neighbors to a specified object at a specified time

[0200] input: object Id: long

[0201] query time: 1 double

[0202] number of neighbors: 1 long

[0203] targeted filter: char string

[0204] returns: neighbor Ids: longs

[0205] array of distances to neighbors: doubles

[0206] Adjacency WM_QRY_SPACE_ADJACENCY

[0207] description: finds all objects within a threshold distance of a specified object during a time interval

[0208] input: object Id: long

[0209] threshold distance: double

[0210] time interval, [t1,t2]: 2 doubles

[0211] targeted filter: char string

[0212] returns: object Id's of nearby objects: long

[0213] Border Polygons WM—QRY_SPACE_BORDERPOLYGONS

[0214] description: finds all polygons bordering the specified polygon at a specified time

[0215] input: object Id: long

[0216] time: 1 double

[0217] targeted filter: char string

[0218] returns: object Id's of bordering polygons: longs

[0219] Distance WM_QRY_SPACE_DISTANCE

[0220] description: finds the distance between two objects at time t

[0221] input: Id of first object: 1 long

[0222] Id of second object: 1 long

[0223] time: 1 double

[0224] returns: distance: double

[0225] notes: Objects can be points, multilines, or polygons. A distance of −1 is returned if either object doesn't exist at time t.

[0226] Common Polygon Border WM_QRY_SPACE_COMMONPOLYGONBORDER

[0227] description: finds the length of shared border between two polygons at time t

[0228] input: object Id of first polygon: 1 long

[0229] object Id of second polygon: 1 long

[0230] time: 1 double

[0231] returns: length of common border: 1 double

[0232] notes: Zero is returned if the polygons share no border.

[0233] Length WM_QRY_SPACE_LENGTH

[0234] description: calculates the length of a multiline or polygon at time t

[0235] input: object Id: long

[0236] time: double

[0237] returns: length: double

[0238] note: The length of a point is zero.

[0239] Polygon Containment WM_QRY_SPACE_POLYGONCONTAINMENT

[0240] description: finds those objects wholly contained by a polygon at time t

[0241] input: number of polygon vertices: 1 long

[0242] polygon vertices: pairs of doubles

[0243] query time: 1 double

[0244] nontargeted filter: char string

[0245] returns: object Id's of contained polygons

[0246] note: The polygon must be simple, i.e. one that does not overlap itself

[0247] Polygon Overlap WM_QRY_SPACE_POLYGONOVERLAP

[0248] description: finds those objects overlapping a polygon at time t

[0249] input: number of polygon vertices: 1 long

[0250] polygon vertices: pairs of doubles

[0251] query time: 1 double

[0252] nontargeted filter: char string

[0253] returns: object Id's of overlapped objects

[0254] note: The polygon must be simple, i.e. one that does not overlap itself

[0255] Rectangle Overlap WM_QRY_SPACE_RECTANGLEOVERLAP

[0256] description: finds those objects overlapping a rectangle at time t

[0257] input: rectangle bounds (xmin, ymin, xmax, ymax): 4 doubles

[0258] query time: 1 double

[0259] nontargeted filter: char string

[0260] returns: object Id's of overlapped objects

[0261] Circle Overlap WM_QRY_SPACE_CIRCLEOVERLAP

[0262] description: finds those objects overlapping a circle at time t

[0263] input: circle center: 2 doubles

[0264] circle radius: 1 double

[0265] query time: 1 double

[0266] nontargeted filter: char string

[0267] returns: object Id's of overlapped objects

[0268] Object Overlap WM_QRY_SPACE_OBJECTOVERLAP

[0269] description: finds those objects overlapping a specified object at time t

[0270] input: object Id of query object: 1 long

[0271] query time: 1 double

[0272] targeted filter: char string

[0273] returns: object Id's of overlapped objects

[0274] Polygon Area WM_QRY_SPACE_POLYGONAREA

[0275] description: calculates the area of a polygon object.

[0276] input: object Id of polygon: 1 long

[0277] returns: area: 1 double

[0278] note: The polygon must be simple, i.e. one that does not overlap itself

[0279] Point Path WM_QRY_SPACE_POINTPATH

[0280] description: converts a point moving in time to a set of vertices. This method tracks the movement through time and collapses the time information

[0281] input: object Id of the point: 1 long

[0282] time interval: 2 doubles.

[0283] returns: number of vertices: 1 long

[0284] vertices: pairs of doubles

[0285] Position at Time WM_QRY_SPACE_POSITIONATTIME

[0286] description: gets the vertices of an object at a specified time

[0287] input: object Id of query object: 1 long

[0288] query time: 1 double

[0289] returns: vertices: array of pairs of doubles

[0290] All Positions at Time WM_QRY_SPACE_ALLPOSITIONSATTIME

[0291] description: gets the vertices of all objects at a specified time

[0292] input: query time: 1 double

[0293] attribute index: 1 long

[0294] returns: number of objects: long

[0295] object Ids: longs

[0296] attribute: char string

[0297] vertices: array of pairs of doubles

[0298] Position through Time WM_QRY_SPACE_POSITIONTHROUGHTIME

[0299] description: gets the vertices of a moving object during a specified time interval

[0300] input: object Id of query object: 1 long

[0301] time interval, [t1,t2]: 2 doubles

[0302] returns: number of intervals between t1 and t2: long

[0303] for each interval: start time, t1: double

[0304] number of vertices at t1: long

[0305] vertices (x,y) at t1: pairs of doubles

[0306] end time, t2: double

[0307] number of vertices at t2: long

[0308] vertices (x,y) at t2: pairs of doubles

[0309] 4. Network Queries

[0310] Nearest Network Neighbors WM_QRY_NETWORK_NEARESTNEIGHBOR

[0311] description: gets the vertices of an object at a specified time

[0312] input: object Id of query object: 1 long

[0313] query time: 1 double

[0314] returns: vertices: array of pairs of doubles

[0315] description: finds the nearest neighbors to a specified node on the network

[0316] input: object Id of the point: 1 long

[0317] number of neighbors: long

[0318] returns: number of neighbors: 1 long

[0319] array of object Id's: long

[0320] Adjacent Network Neighbors WM_QRY_NETWORK_ADJACENTNEIGHBORS

[0321] description: finds the nodes immediately adjacent to the specified node

[0322] input: object Id of the query node: 1 long

[0323] returns: number of adjacent objects, 1 long

[0324] array of object Id's: long

[0325] Network Distance WM_QRY NETWORK_DISTANCE

[0326] description: calculates the distance between two nodes on the network

[0327] input: object Id of the first node: 1 long

[0328] object Id of the second node: 1 long

[0329] returns: length of shortest connecting route along network: 1 double

[0330] number of nodes between specified nodes: 1 long

[0331] Network Neighbors by Distance WM_QRY_NETWORK_NEIGHBORSBYDISTANCE

[0332] description: finds those nodes within a specified distance of a target node

[0333] input: object Id: 1 long

[0334] distance: 1 double

[0335] returns: number of neighboring objects, 1 long

[0336] array of object Id's: long

[0337] Network Neighbors by Node WM_QRY_NETWORK_NEIGHBORSBYNODE

[0338] description: finds those neighbors which are separated by a certain number of nodes from a specified target object.

[0339] input: object Id: 1 long

[0340] node separation: 1 long

[0341] returns: number of neighboring objects, 1 long

[0342] array of object Id's: long

[0343] 5. Temporal Queries

[0344] Time Slice WM_QRY_TIME_SLICE

[0345] description: finds all objects that exist at a specified time

[0346] input: time: double

[0347] returns: array of object Id's: long

[0348] Interval Containment WM_QRY_TIME_INTERVALCONTAINMENT

[0349] description: finds all objects whose lifespan is wholly contained within a specified time interval

[0350] input: time interval, [t1, t2]: 2 doubles

[0351] nontargeted filter: char string

[0352] returns: array of object Id's: long

[0353] Interval Overlap WM_QRY_TIME_INTERVALOVERLAP

[0354] description: finds all objects whose occur within a specified time interval

[0355] input: time interval, [t1, t2]: 2 doubles

[0356] nontargeted filter: char string

[0357] returns: array of object Id's: long

[0358] Lifespan Intersection WM_QRY_TIME_LIFESPANINTERSECTION

[0359] description: finds the intersection of the lifespans of two specified object chains

[0360] input: object Id's of the two objects: 2 longs

[0361] returns: array of time intervals, [t1,t2]: pairs of doubles

[0362] Lifespan Union WM_QRY_TIME_LIFESPANUNION

[0363] description: finds the union of the lifespans of two specified objects

[0364] input: object Id's of the two objects: 2 longs

[0365] returns: array of time intervals, [t1,t2]: pairs of doubles

[0366] Object Attributes WM_QRY_TIME_OBJECTATTRIBUTES

[0367] description: retrieves the values of the specified attribute of an object over a specified interval

[0368] input: id of the object: 1 long

[0369] attribute index: 1 long

[0370] time interval, [t1, t2]: 2 doubles

[0371] returns: number of attribute states in [t1, t2]: long for each state:

[0372] attribute: character string

[0373] attribute state interval, [t1, t2]: 2 doubles

[0374] Attribute at Time WM_QRY_TIME_ATTRIBUTEATTIME

[0375] description: retrieves the value of the specified attribute of an object at a specified time

[0376] input: id of the object: 1 long

[0377] attribute index: 1 long

[0378] time: 1 double

[0379] returns: character string

[0380] Object Lifespan WM_QRY_TIME_OBJECTLIFESPAN

[0381] description: returns the time intervals when an object is in existence

[0382] input: object Id: 1 long

[0383] returns: array of time intervals, [t1,t2]: pairs of doubles

[0384] 6. Spatio-temporal Queries

[0385] Inside Threshold Distance WM_QRY_SPACETIME_INSIDETHRESHOLDDISTANCE

[0386] description: finds the time intervals within a specified interval when two objects are within a specified distance

[0387] input: object id's of the two objects: long

[0388] time interval, [t1, t2]: 2 doubles

[0389] threshold distance: 1 double

[0390] returns: array of time intervals, [t1,t2]: pairs of doubles

[0391] Outside Threshold Distance WM_QRY_SPACETIME_OUTSIDETHRESHOLDDISTANCE

[0392] description: finds the time intervals within a specified interval when two objects are separated by a distance greater than a specified distance

[0393] input: object id's of the two objects: long

[0394] time interval, [t1, t2]: 2 doubles

[0395] threshold distance: 1 double

[0396] returns: array of time intervals, [t1,t2]: pairs of doubles

[0397] Polygon Containment Intervals WM—QRY_SPACETIME_POLYGONCONTAINMENTINTERVALS

[0398] description: finds the time intervals within a given interval when the specified object is wholly contained by a specified polygon

[0399] input: id of the object: long

[0400] time interval, [t1, t2]: 2 doubles

[0401] vertices of the polygon: pairs of doubles

[0402] returns: array of time intervals, [t1,t2]: pairs of doubles

[0403] note: The polygon must be simple, i.e. one that does not overlap itself

[0404] Distance over Time WM_QRY_SPACETIME_DISTANCEOVERTIME

[0405] description: finds the distance between two objects during a time interval

[0406] input: id's of the two objects: 2 longs

[0407] time interval, [t1, t2]: 2 doubles

[0408] time resolution: 1 double

[0409] returns: distance array: doubles

[0410] Minimum Distance WM_QRY_SPACETIME_MINIMUMDISTANCE

[0411] description: finds when, in a specified interval, two objects are at their minimum distance

[0412] input: id's of the two objects: 2 longs

[0413] time interval, [t1, t2]: 2 doubles

[0414] returns: minimum time: double

[0415] minimum distance: double

[0416] Collision WM_QRY_SPACETIME_COLLISION

[0417] description: finds when, in a specified interval, two objects intersect.

[0418] input: id's of the two objects: 2 longs

[0419] time interval, [t1, t2]: 2 doubles

[0420] returns: array of time intervals, [t1,t2]: pairs of doubles

[0421] All Object Collisions WM_QRY_SPACETIME_ALLCHAINCOLLISIONS

[0422] description: finds all objects intersected by a specified object chain in a specified interval

[0423] input: id of the object chain: 1 long

[0424] time interval, [t1, t2]: 2 doubles

[0425] targeted filter: char string

[0426] returns: array of object ids: longs

[0427] All Collisions WM_QRY_SPACETIME_ALLCOLLISIONS

[0428] description: finds all object collisions occurring in a specified interval

[0429] input: time interval, [t1, t2]: 2 doubles

[0430] nontargeted filter: char string

[0431] returns: array of object-id pairs: longs

[0432] Brushes with Object WM_QRY_SPACETIME_BRUSHES

[0433] description: finds all objects passing within a threshold distance of a target in a specified interval.

[0434] input: id of the object: 1 long

[0435] time interval, [t1, t2]: 2 doubles

[0436] threshold distance: 1 double

[0437] targeted filter: char string

[0438] returns: array of object ids: longs

[0439] 7. Epidemiological Queries

[0440] Define Event WM_QRY_EPI_DEFINEEVENT

[0441] description: allows the user to define an event using a filter, intended for diagnoses and other epidemiological applications. This method then creates a chronological list of the events and the objects associated with them for subsequent queries

[0442] input: object ids: longs

[0443] nontargeted filter: char string

[0444] returns: nothing.

[0445] First Event WM_QRY_EPI_FIRSTEVENT

[0446] description: finds the first event

[0447] input: none.

[0448] returns: Id of the event's sub-object: long

[0449] Interval Events WM_QRY_EPI_INTERVALEVENTS

[0450] description: finds all events occurring in a specified time interval.

[0451] input: time interval, [t1, t2]: double

[0452] nontargeted filter: char string

[0453] returns: array of sub-object id's: longs

[0454] Nearest Events in Time WM_QRY EPI_NEARESTEVENTS

[0455] description: finds the k nearest events around a specified focus event

[0456] input: sub-object id of the focus event: long

[0457] maximum number of events to return: long

[0458] search direction: long

[0459] returns: up to k sub-object id's: long

[0460] note: Set search direction code to −1 to search only for events before focus event. Set it to 0 to search for nearest events before and after focus event, and to 1 to search only after the focus event.

[0461] Nearest Events to Time WM_QRY_EPI_NEARESTEVENTSTOTIME

[0462] description: finds the k nearest events around a specified time

[0463] input: time: double

[0464] maximum number of events to return: long

[0465] search direction: long

[0466] returns: up to k sub-object id's: long

[0467] note: Set search direction code to −1 to search only for events before focus event. Set it to 0 to search for nearest events before and after focus event, and to 1 to search only after the focus event.

[0468] Waiting Time WM_QRY_EPI_WAITINGTIME

[0469] description: finds the time between two events

[0470] input: sub-object id of the first event: long

[0471] sub-object id of the second event: long

[0472] returns: waiting time: double

[0473] Adjacent Waiting Times WM_QRY EPI_ADJACENTWAITINGTIMES

[0474] description: calculates the waiting times between events adjacent in time

[0475] input: time interval, [t1, t2]: double

[0476] returns: waiting times: doubles

[0477] Adjacent Waiting Time/Distance Pairs M_QRY_EPI_ADJACENTWTDISTANCEPAIRS

[0478] description: calculates the waiting times between events adjacent in time and the associated distances between the objects

[0479] input: time interval, [t1, t2]: double

[0480] returns: waiting time/distance pairs: array of pairs of doubles

[0481] All Waiting Time/Distance Pairs WM_QRY_EPI_ALLWTDISTANCEPAIRS

[0482] description: calculates the waiting times between all pair-wise combinations of events, and the associated distances between the objects

[0483] input: time interval, [t1, t2]: double

[0484] returns: waiting time/distance pairs: array of pairs of doubles

[0485] Find Exposed Objects WM_QRY_EPI_FINDEXPOSED

[0486] description: returns the objects which spent more than a specified amount of time within a specified threshold distance of a target object during a time interval.

[0487] input: target Id: 1 long

[0488] threshold distance: 1 double

[0489] threshold time period: 1 double

[0490] time interval, [t1,t2]: 2 doubles

[0491] targeted filter: char string

[0492] returns: object Ids: longs

[0493] Exposure Time WM_QRY_EPI_EXPOSURETIME

[0494] description: returns the cumulative amount of time the target object spent within a threshold distance of other objects during a time interval

[0495] input: target Id: 1 long

[0496] threshold distance: 1 double

[0497] time interval, [t1,t2]: 2 doubles

[0498] targeted filter: char string

[0499] returns: total time: 1 double

[0500] Epidemic Curve WM_QRY_EPI_EPIDEMICCURVE

[0501] description: calculates the epidemic curve based on the current diagnosis for a specified time interval. The y-axis describes the incidence rate, the number of disease events divided by the susceptible person-time. Generally, an approximation is used, the proportion of susceptible people infected. This approximation counts people infected during the interval as infected for the numerator and susceptible for the entire denominator. With the temporal information in STroodle data, we can calculate the actual incidence rate, dividing the number of events by the susceptible person time in the interval. The x-axis divides the specified time interval equally into the number of bins described

[0502] input: number of bins: 1 long

[0503] time interval, [t1,t2]: 2 doubles

[0504] returns: incidence rates: doubles

[0505] E. C++ Classes and Functions

[0506] As described above, STroodle 406 builds on classes created in ToodlePip. List below are the STroodle implementation of object classes, such as TimeSpaceObject, TPointObject, and TPolygonObject. In many cases, methods in derived classes override methods in their ancestral class; when this occurs, the methods will be listed for derived classes, but only described in the ancestral class. For example, the function GetBoundingRegion is only described in TimeSpaceObject, though it can be called within other derived classes. To get the bounding region of a TPolygon object, refer to the definition of GetBoundingRegion under TimeSpaceObject.

[0507] Functions within classes will be organized in loose groups, e.g. Get-type commands together, Set-type commands together, followed by more complex queries. The name of the command will be followed by the format of the command, with the return type ahead of the command and parentheses surrounding the input parameters required to execute the function. The parameters, if any, will be described, followed by a general description of the function itself. Groups of functions will have a title when the group begins. Following pages will have the group title at the top right of the page in the header for ease of reference.

[0508] 1. Class TimeSpaceObject

[0509] constructors

[0510] no public constructors

[0511] virtual ˜TimeSpaceObject( )

[0512] takes no parameters

[0513] description: TimeSpaceObject destructor

[0514] public methods

[0515] CreateObjectAtTime

[0516] virtual TimeSpaceObject* CreateObjectAtTime(double t)

[0517] parameters: double t-time

[0518] description: copies this at time t. Essentially, this function creates a new object that is a snapshot of this at time t, containing the position information and setting the start and end time to t

[0519] Get Functions

[0520] GetStartTime

[0521] double GetStartTime( )

[0522] takes no parameters

[0523] description: returns the start time of a time space object

[0524] GetEndTime

[0525] double GetEndTime( )

[0526] takes no parameters

[0527] description: returns the stop time of a time space object

[0528] GetLifeSpan

[0529] double GetLifeSpan( )

[0530] takes no parameters

[0531] description: returns difference between the object's start and end times

[0532] GetMovement

[0533] const list<Pt> & GetMovement( )

[0534] takes no parameters

[0535] description: returns the movement vector during the observation interval as a list of x, y coordinates representing the displacement of each coordinate during the observation

[0536] GetNextObject

[0537] TimeSpaceObject*GetNextObject( )

[0538] const TimeSpaceObject*GetNextObject( )

[0539] takes no parameters

[0540] description: two methods which return a pointer to the next object in the object chain

[0541] GetPreviousObject

[0542] TimeSpaceObject* GetPreviousObject( )

[0543] const TimeSpaceObject*GetPreviousObject( )

[0544] takes no parameters

[0545] description: two methods which return a pointer to the previous object in the object chain

[0546] GetParentChain

[0547] Chain* GetParentChain( )

[0548] takes no parameters

[0549] description: returns a pointer to the object's parent chain

[0550] GetAttribute

[0551] attributeTag GetAttribute(int index)

[0552] parameters: int index—the category within which to look

[0553] attributeTag—a struct containing the attribute state, defined p. 20.

[0554] description: looks within the parent chain for the attribute of this

[0555] GetVertexCount

[0556] virtual long GetVertexCount( )

[0557] takes no parameters

[0558] description: returns the number of vertices of subobject

[0559] GetVertices

[0560] virtual list<Pt> GetVertices( )

[0561] takes no parameters

[0562] description: returns a list of the x, y coordinates of the vertices of the subobject

[0563] GetObjectType

[0564] virtual long GetObjectType( )

[0565] takes no parameters

[0566] description: returns the object type of the subobject (point, line, polygon)

[0567] GetBoundingRegion

[0568] virtual NRect GetBoundingRegion(double t)

[0569] parameters: double t—the time for which the bounding rectangle is required

[0570] description: gets minimum bounding rectangle for this at time t. This method uses CreateObjectAtTime to take a snapshot of this to find the bounding region.

[0571] GetMaxBoundingRegion

[0572] virtual NRect GetMaxBoundingRegion( )

[0573] takes no parameters

[0574] description: finds the bounding rectangle for the object between the start and end times. This command will return the same rectangle as GetBoundingRegion unless the object moves during the observation interval.

[0575] Set Functions

[0576] SetStartTime

[0577] Void SetStartTime(double t)

[0578] parameters: double t—the new end time

[0579] description: sets start of observation interval

[0580] SetEndTime

[0581] void SetEndTime(double t)

[0582] parameters: double t—the new end time

[0583] description: sets end of observation interval

[0584] SetMovement

[0585] void SetMovement(const list<Pt>&)

[0586] parameters: const list<Pt>&—pointer to the list of displacements for each coordinate

[0587] description: sets the movement vectors for observation interval

[0588] SetParentChain

[0589] void SetParentChain(Chain *ch)

[0590] parameters: Chain *ch—pointer to parent chain

[0591] description: sets which chain the object belongs within

[0592] SetNextObject

[0593] void SetNextObject(TimeSpaceObject *)

[0594] parameters: TimeSpaceObject *—object pointer

[0595] description: designates specified object as subsequent to this

[0596] SetPreviousObject

[0597] void SetPreviousObject(TimeSpaceObject *)

[0598] parameters: TimeSpaceObject *—object pointer

[0599] description: designates specified object as previous to this

[0600] Length and Distance

[0601] LengthAtTime

[0602] virtual double LengthAtTime(double t)

[0603] parameters: double t—time

[0604] description: returns the object length at the specified time

[0605] Distance

[0606] virtual double Distance(const TimeSpaceObject &obj)

[0607] parameters: const TimeSpaceObject &obj—object pointer

[0608] description: calculates distance between object and this at beginning of observation interval

[0609] NRectDistance

[0610] virtual double NRectDistance(doubleList &mins, doubleList &maxs)

[0611] parameters: doubleList &mins—coordinates of rectangle minimum

[0612] doubleList &maxs-coordinates of rectangle maximum

[0613] description: calculates the nearest distance between object and an N-Rectangle. This method includes choosing the closest point of N-Rect from which to measure the distance.

[0614] example: the lines represent the nearest distance between the N-Rect and the grey points.

[0615] DistanceAtTime

[0616] virtual double DistanceAtTime(TimeSpaceObject &obj, double t)

[0617] parameters: TimeSpaceObject &obj—object pointer

[0618] double t—time to calculate distance

[0619] description: calculates the distance between two objects at a specified time within the observation interval

[0620] DistanceOverTime

[0621] virtual double DistanceOverTime(const TimeSpaceObject &obj, double t1, double t2, double dt, double *distances)

[0622] parameters: const TimeSpaceObject &obj—object pointer

[0623] double t1—start time of observation interval

[0624] double t2—end time of interval

[0625] double dt—-resolution of distance over time calculation

[0626] double *distances—pointer to list of distances at each timepoint

[0627] description: calculates the distance between two objects during a time interval, saves a distance array of doubles

[0628] MinimumDistance

[0629] virtual double MinimumDistance(const TimeSpaceObject &obj, double t1, double t2, double &time)

[0630] parameters: const TimeSpaceObject &obj—object pointer

[0631] double t1—interval start time

[0632] double t2—interval end time

[0633] double &time—pointer to the vector of ??

[0634] description: calculates when, in a specified time interval, two objects are at their minimum distance

[0635] TimeInsideDistance

[0636] virtual timeList TimeInsideDistance(const TimeSpaceObject &obj, double t1, double t2, double threshold)

[0637] parameters: const TimeSpaceObject &obj—object pointer

[0638] double t1—start time of observation interval

[0639] double t2—end time of interval

[0640] double dt—resolution of distance over time calculation

[0641] double threshold—threshold distance

[0642] description: finds the times within a specified time interval when objects are within a specified threshold distance

[0643] TimeOutsideDistance

[0644] virtual timeList TimeOutsideDistance(const TimeSpaceObject &obj, double t1, double t2, double threshold)

[0645] parameters: const TimeSpaceObject &obj—object pointer

[0646] double t1—start time of observation interval

[0647] double t2—end time of interval

[0648] double dt—resolution of distance over time calculation

[0649] double threshold—threshold distance

[0650] description: finds the times within a specified interval when objects are outside a specified distance

[0651] Overlap

[0652] OverlapsObjectAtTime

[0653] virtual bool OverlapsObjectAtTime(const TimeSpaceObject &, double t)

[0654] parameters: const TimeSpaceObject&-object pointer

[0655] double t—time

[0656] description: returns Boolean whether objects overlap in space during a specified time interval

[0657] OverlapsRectAtTime

[0658] virtual bool OverlapsRectAtTime(const Rect &r, double t)

[0659] parameters: const Rect &r—rectangle pointer

[0660] double t—time

[0661] description: returns Boolean whether object overlaps rectangle

[0662] OverlapsCircleAtTime

[0663] virtual bool OverlapsCircleAtTime(const Pt &p, double radius, double t)

[0664] parameters: const Pt &p—pointer to center of circle, a point

[0665] double radius—the circle's radius

[0666] double t—time

[0667] description: returns Boolean whether object overlaps circle of specified radius

[0668] OverlapsPolyAtTime

[0669] virtual bool OverlapsPolyAtTime(const BasicPolygon &r, double t)

[0670] parameters: const BasicPolygon &r—pointer to polygon

[0671] double t—time

[0672] description: returns Boolean whether object overlaps specified polygon. The polygon must be simple, i.e. one that does not overlap itself

[0673] OverlapsInTime

[0674] bool OverlapsInTime(const TimeSpaceObject &obj)

[0675] parameters: const TimeSpaceObject &obr—pointer to object

[0676] description: returns Boolean (Y/N) whether objects ever exist at the same time

[0677] Containment & Intersection

[0678] ContainedByPolyAtTime

[0679] virtual bool ContainedByPolyAtTime(const BasicPolygon &r, double t)

[0680] parameters: const BasicPolygon &r—pointer to polygon

[0681] double t—time

[0682] description: returns Boolean whether object is contained within polygon at specified time. The basic polygon must be simple, i.e. one that does not overlap itself

[0683] ContainedByPoly

[0684] virtual bool ContainedByPoly(const BasicPolygon &r, double t1, double t2, timeList &times)

[0685] parameters: const BasicPolygon &r—pointer to polygon

[0686] double t1—start time of observation

[0687] double t2—end time of observation

[0688] timeList &times—pointer to list of times of containment

[0689] description: returns Boolean whether object is contained by polygon during the interval between specified times. The basic polygon must be simple, i.e. one that does not overlap itself

[0690] Intersects

[0691] virtual bool Intersects(const TimeSpaceObject &obj, double t1, double t2, timeList &times)

[0692] parameters: const TimeSpaceObject &obj—pointer to object

[0693] double t1—start time of observation

[0694] double t2—end time of observation

[0695] timeList &times—pointer to list of times of intersection

[0696] description: returns Boolean whether two objects intersect at any point between the specified times Class TPointObject

[0697] 1. class TPointObject: public PointObject, public TimeSpaceObject

[0698] constructors

[0699] TPointObject( )

[0700] takes no parameters

[0701] description: default constructor

[0702] TPointObject(const TPointObject &)

[0703] parameters: const TPointObject &—pointer to object

[0704] description: copy constructor, copies existing TPointObject

[0705] TPointObject(const TPointObject &, double t)

[0706] parameters: const TPointObject &—pointer to object

[0707] double t—snap shot time

[0708] description: copies another point at the specified time, the new object has a start and end time equal to the specified time (like CreateNewObject)

[0709] TPointObject(const PointObject&, double t1, double t2)

[0710] parameters: const PointObject &—pointer to object

[0711] double t1—start time

[0712] double t2—end time

[0713] description: adds time information to a ToodlePip PointObject, specify start and end time

[0714] TPointObject(double t1, double t2)

[0715] parameters: double t1—start time

[0716] double t2—end time

[0717] description: creates new object with start and end times, you then must add other characteristics with set commands

[0718] TPointObject(double x, double y, double t1, double t2)

[0719] parameters: double x—X coordinate of object

[0720] double y—Y coordinate of object

[0721] double t1—start time

[0722] double t2—end time

[0723] description: creates a new TPointObject, setting the (x, y) coordinates and the start and end times

[0724] virtual ˜TPointObject( )

[0725] takes no parameters

[0726] description: TPointObject destructor

[0727] 3. class TMultiLine: public MultiLine, public TimeSpaceObject

[0728] constructors

[0729] TMultiLine( )

[0730] takes no parameters

[0731] description: default constructor

[0732] TMultiLine(const TMultiLine &);

[0733] parameters: const TMultiLine &—pointer to object

[0734] description: copy constructor, copies existing TMultiLine

[0735] TMultiLine(const TMultiLine &, double t);

[0736] parameters: const TPointObject &—pointer to object

[0737] double t—snapshot time

[0738] description: copies another line at the specified time, the new object has a start and end time equal to the specified time (like CreateNewObject)

[0739] TMultiLine(const MultiLine &, double t1, double t2);

[0740] parameters: const MultiLine &—pointer to object

[0741] double t1—start time

[0742] double t2—end time

[0743] description: adds time information to a ToodlePip MultiLine, specify start and end time

[0744] TMultiLine(double t1, double t2)

[0745] parameters: double t1—start time

[0746] double t2—end time

[0747] description: creates new object with start and end times, you then must add other characteristics with set commands

[0748] virtual ˜TMultiLine( )

[0749] takes no parameters

[0750] description: TMultiLine destructor

[0751] 4. class TPolygonObject: public PolygonObject, public TimeSpaceObject

[0752] STroodle polygons must be simple, that is they do not overlap themselves.

[0753] constructors

[0754] TPolygonObject( )

[0755] takes no parameters

[0756] description: default constructor

[0757] TPolygonObject(const TPolygonObject &p)

[0758] parameters: const TPolygonObject &p—pointer to object

[0759] description: copy constructor, copies existing TPolygonObject

[0760] TPolygonObject(const TPolygonObject &p, double t)

[0761] parameters: const TPolygonObject &p—pointer to object

[0762] double t—snapshot time

[0763] description: copies another TPolygonObject at the specified time, the new object has a start and end time equal to the specified time (like CreateNewObject)

[0764] TPolygonObject(const BasicPolygon &p, double t1, double t2);

[0765] parameters: const BasicPolygon &p—pointer to object

[0766] double t1—start time

[0767] double t2—end time

[0768] description: adds time information to a ToodlePip BasicPolygon, specify start and end time

[0769] TPolygonObject(const PolygonObject &p, double t1, double t2);

[0770] parameters: const PolygonObject &—pointer to object

[0771] double t1—start time

[0772] double t2—end time

[0773] description: adds time information to a ToodlePip PolygonObject, specify start and end time

[0774] TPolygonObject(double t1, double t2)

[0775] parameters: double t1—start time

[0776] double t2—end time

[0777] description: creates new object with start and end times, you then must add other characteristics with set commands

[0778] virtual ˜TPolygonObject( );

[0779] takes no parameters

[0780] description: TPolygonObject destructor

[0781] 5. Class Chain

[0782] constructors

[0783] Chain(class TimeSpaceObject *first)

[0784] parameters: TimeSpaceObject *first—pointer to the first object in the chain

[0785] description: creates a chain using the first object, the subsequent members of the chain can be found by following links within each object

[0786] Chain(fstream &f)

[0787] parameters: fstream &f—pointer fstream location

[0788] description: creates a chain from the fstream

[0789] virtual Chain( )

[0790] takes no parameters

[0791] description: Chain destructor, also deletes all objects in chain

[0792] 6. Data Saving and Access Functions

[0793] SaveToDisk

[0794] void SaveToDisk (fstream &file)

[0795] parameters: fstream &file—location of file into which to save

[0796] description: save disk file of TimeSpaceObject chains

[0797] ReadFromDisk string ReadFromDisk(fstream &file)

[0798] parameters: fstream &file—location of file into which to save

[0799] description: read from a disk file of TimeSpaceObject chains

[0800] 7. Get Functions

[0801] GetChain

[0802] TimeSpaceObject* GetChain( )

[0803] takes no parameters

[0804] description: returns pointer to first object in chain

[0805] GetFirstObject

[0806] const TimeSpaceObject* GetFirstObject( )

[0807] TimeSpaceObject* GetFirstObject( )

[0808] takes no parameters

[0809] description: two methods that return a pointer to the first object in chain

[0810] GetLastObject

[0811] const TimeSpaceObject* GetLastObject( )

[0812] TimeSpaceObject* GetLastObject( )

[0813] takes no parameters

[0814] description: two methods that return a pointer to the last object in chain

[0815] GetAttributeCount

[0816] int GetAttributeCount( )

[0817] takes no parameters

[0818] description: gets the number of attribute fields

[0819] GetAttribute

[0820] attribute & GetAttribute(int i)

[0821] bool GetAttribute(int index, attributeTag &tag, double t=0)

[0822] parameters: attribute &—a struct which contains 2 vectors, one of attribute states and one with the duration of each attribute, defined on p. 20

[0823] int i, int index—the attribute category

[0824] attributeTag &tag—pointer to location where attribute state returned as an attributeTag, defined p. 20

[0825] double t—time to return attribute, default time specified to zero, as some attributes are invariant over the duration of the chain

[0826] description: returns the ith attribute for a chain at a

[0827] GetBoundingRegion

[0828] NRect GetBoundingRegion( )

[0829] takes no parameters

[0830] description: finds the bounding rectangle for the chain between its start and end times

[0831] GetSubObject

[0832] TimeSpaceObject* GetSubObject(double t)

[0833] const TimeSpaceObject* GetSubObject(double t)

[0834] parameters: double t—time

[0835] description: two methods that return a pointer to the object in the chain that exists at the specified time

[0836] GetStartTime

[0837] double GetStartTime( )

[0838] takes no parameters

[0839] description: returns the start time of the first time space object in the chain

[0840] GetEndTime

[0841] double GetEndTime( )

[0842] takes no parameters

[0843] description: returns the stop time of a the last time space object in the chain

[0844] GetLength

[0845] int GetLength( )

[0846] int GetLength(TimeSpaceObject *start, TimeSpaceObject *end)

[0847] parameters: TimeSpaceObject* start—the pointer to the first time space object TimeSpaceObject* end—the pointer to the last time space object

[0848] description: two methods that return timespans. The first takes no parameters and returns the chain lifespan, the difference between the start time of the first object and the end time of the last object. The second calculates the length between two objects in the chain, not necessarily the first and last.

[0849] 8. Attribute Functions

[0850] AttributesThroughTime

[0851] strings AttributesThroughTime(int, double t1, double t2, timeList &)

[0852] parameters: int i—attribute field

[0853] double t1—start of time interval

[0854] double t1—end of time interval

[0855] timeList &—pointer to list of times

[0856] description: returns list of attributes of object chain at observations within time interval with the time intervals each attribute exists

[0857] SetAttribute

[0858] bool SetAttribute(int i, TimeSpaceObject *obj, double datum)

[0859] bool SetAttribute(int i, TimeSpaceObject *obj, long datum)

[0860] bool SetAttribute(int i, TimeSpaceObject *obj, const char *datum)

[0861] parameters: int i—attribute field

[0862] TimeSpaceObject *obj—object pointer

[0863] double datum—attribute in double format

[0864] long datum—attribute in long format

[0865] const char *datum—attribute in char format

[0866] description: three methods to assign ith attribute to an object in a chain, a method for each type of attribute

[0867] NewChainAttribute

[0868] void NewChainAttribute(double datum)

[0869] void NewChainAttribute(long datum)

[0870] void NewChainAttribute(const char *datum)

[0871] parameters: double datum—attribute in double format

[0872] long datum—attribute in long format

[0873] const char *datum—attribute in char format

[0874] description: three methods to create a new column in the vector of attributes for a chain, a method for each type of attribute. The attribute is set to the specified value for the entire chain. See FIG. 4.1

[0875] NewObjectAttribute

[0876] void NewObjectAttribute(TimeSpaceObject *obj, double datum)

[0877] void NewObjectAttribute(TimeSpaceObject *obj, long datum)

[0878] void NewObjectAttribute(TimeSpaceObject *obj, const char *datum)

[0879] parameters: TimeSpaceObject *obj—object pointer

[0880] double datum—attribute in double format

[0881] long datum—attribute in long format

[0882] const char *datum—attribute in char format

[0883] description: three methods to create a new attribute column for an object, a method for each type of attribute. The attribute is set to the specified value for the duration of the object. See FIG. 4.1

[0884] AppendObjectAttribute

[0885] void AppendObjectAttribute(int i, TimeSpaceObject *obj, double datum)

[0886] void AppendObjectAttribute(int i, TimeSpaceObject *obj, long datum)

[0887] void AppendObjectAttribute(int i, TimeSpaceObject *obj, const char *datum)

[0888] parameters: int i—attribute field

[0889] TimeSpaceObject *obj—object pointer

[0890] double datum—attribute in double format

[0891] long datum—attribute in long format

[0892] const char *datum—attribute in char format

[0893] description: three methods to add a new state to the list of attribute states or a new time period to an existing state. See FIG. 4.1 to distinguish AppendObjectAttribute from NewChainAttribute and NewObjectAttribute.

[0894] 9. Chain Functions

[0895] Append

[0896] void Append(TimeSpaceObject *)

[0897] parameters: TimeSpaceObject *obj—object pointer

[0898] description: splices object to this. May splice two object chains together if the appended TimeSpaceObject points to subsequent objects.

[0899] ExtendChain

[0900] TimeSpaceObject* ExtendChain( )

[0901] takes no parameters

[0902] description: extends the chain by creating a new object from the last object in the chain. It duplicates the attributes and sets the start and end times equal to the end time of the duplicated object.

[0903] 10. Distance and Proximity

[0904] Distances

[0905] void Distances(Chain &obj, double t1, double t2, double dt, double *)

[0906] parameters: Chain &obj—chain pointer

[0907] double t1—interval start time

[0908] double t2—interval end time

[0909] double dt—timestep resolution

[0910] double *—pointer of to list of times and distances

[0911] description: creates vector of distances between this and specified chain within time interval

[0912] MinimumDistance

[0913] double MinimumDistance(Chain &, double t1, double t2, double &, formula *form=NULL, FilterFunction2 func=NULL)

[0914] parameters: Chain &—chain pointer

[0915] double t1—interval start time

[0916] double t2—interval end time

[0917] double &—pointer to the vector of ??

[0918] formula* form=NULL—filter function, default not specified

[0919] FilterFunction2 func=NULL—targeted filter function, default not specified

[0920] description: calculates when, in a specified time interval, this is at its minimum distance from the specified chain

[0921] ClosestSubObject

[0922] TimeSpaceObject* ClosestSubObject(double t)

[0923] parameters: double t—time

[0924] description: finds closest subobject to this at time t

[0925] 11. Time Lists and Snapshots

[0926] PointPathThroughTime

[0927] MultiLine* PointPathThroughTime(double t1, double t2)

[0928] parameters: double t1—start time

[0929] double t2—end time

[0930] description: returns point path through time during the specified interval as a set of vertices for a multiline. This method retains the sequence of positions retained, but the time information is lost

[0931] TimeSliceObject

[0932] TimeSpaceObject* TimeSliceObject(double t)

[0933] parameters: double t—snapshot time

[0934] description: creates a new object that is a duplicate of the object in the chain which exists at time t. This new object has start and end times equal to t.

[0935] ExistsAtTime

[0936] bool ExistsAtTime(double t)

[0937] parameters: double t—time

[0938] description: returns Boolean whether this has a subobject that exists at time t

[0939] ExistenceTimes

[0940] timeList ExistenceTimes(double t1, double t2)

[0941] parameters: double t1—start time

[0942] double t2—end time

[0943] description: returns timelist when this exists within time interval

[0944] FilterFunctionTimes

[0945] timeList FilterFunctionTimes(formula *form=NULL, FilterFunction

[0946] func=NULL)

[0947] parameters: formula*form =NULL—filter function, default not specified

[0948] FilterFunction2 func=NULL—targeted filter function, default not specified

[0949] description: returns timelist when this has attributes that satisfy the filter function

[0950] CollisionTimes

[0951] void CollisionTimes(Chain &, double t1, double t2, timeList &, formula

[0952] *form=NULL, FilterFunction2 func=NULL)

[0953] parameters: Chain &—chain pointer

[0954] double t1—interval start time

[0955] double t2—interval end time

[0956] timelist &—pointer to timelist

[0957] formula*form NULL—filter function, default not specified

[0958] FilterFunction2 func=NULL—targeted filter function, default not specified

[0959] description: creates a list of the time intervals when this collides with the specified chain, can be further restricted to when this and the chain have specific attributes

[0960] WithinThresholdTimes

[0961] void WithinThresholdTimes(Chain &, double t1, double t2, double threshold, timeList &, formula *form=NULL, FilterFunction2 func=NULL)

[0962] parameters: Chain &—chain pointer

[0963] double t1—interval start time

[0964] double t2—interval end time

[0965] double threshold—threshold distance

[0966] timelist &—pointer to timelist

[0967] formula*form=NULL—filter function, default not specified

[0968] FilterFunction2 func=NULL—targeted filter function, default not specified

[0969] description: creates a list of the time intervals when this is within a threshold distance of the specified chain, can be further restricted to when this and the chain have specific attributes

[0970] PolygonContainmentTimes

[0971] void PolygonContainmentTimes(BasicPolygon &, double t1, double t2, timeList &)

[0972] parameters: BasicPolygon &—polygon pointer

[0973] double t1—interval start time

[0974] double t2—interval end time

[0975] timelist &—pointer to timelist

[0976] description: creates a list of the time intervals when this is within the specified polygon. The basic polygon must be simple, i.e. one that does not overlap itself

[0977] 12. Class STIS

[0978] constructors

[0979] STIS( )

[0980] takes no parameters

[0981] description: default constructor

[0982] STIS(fstream &)

[0983] parameters: fstream &—pointer to fstream location

[0984] description: create STIS object from memory

[0985] virtual ˜STIS( )

[0986] takes no parameters

[0987] description: STIS object destructor

[0988] public methods

[0989] Data and Chain Functions

[0990] SaveToDisk(fstream &file)

[0991] bool SaveToDisk(fstream &file) const;

[0992] parameters: fstream &file—location of file into which to save

[0993] description: save disk file of TimeSpaceObject chains

[0994] ReadFromDisk

[0995] bool ReadFromDisk(fstream &file);

[0996] parameters: fstream &file—location of file into which to save

[0997] description: read from a disk file of TimeSpaceObject chains

[0998] AddChain(Chain *chain)

[0999] virtual void AddChain(Chain *chain),

[1000] parameters: Chain*chain—pointer to the chain

[1001] description: add a chain to the internal data structure

[1002] RemoveChain

[1003] virtual void RemoveChain(Chain *chain)

[1004] parameters: Chain*chain—pointer to the chain

[1005] description: removes chain from internal data structure, does not delete the chain from memory

[1006] BuildRTree

[1007] void BuildRTree( )

[1008] takes no parameters

[1009] description: build Hilbert R-tree to index data for faster searching

[1010] Get Functions

[1011] GetChainByIndex

[1012] Chain* GetChainByIndex(long index)

[1013] parameters: long index—attribute in index field

[1014] description: returns the chain pointer after inputting chain name

[1015] GetChainCount

[1016] long GetChainCount( )

[1017] takes no parameters

[1018] description: returns the total # of chains in internal data structure

[1019] GetBoundingRect

[1020] NRect GetBoundingRect( )

[1021] takes no parameters

[1022] description: gets the bounding rectangle for all objects in internal data structure

[1023] GetChainList

[1024] ChainVector & GetChainList( )

[1025] takes no parameters

[1026] description: lists all chains in internal data structure

[1027] Proximity

[1028] FindNearestObject

[1029] TimeSpaceObject* FindNearestObject(double x, double y, double t, formula *form=NULL, FilterFunction func=NULL)

[1030] parameters: double x—X coordinate of location

[1031] double y—Y coordinate of location

[1032] double t—timepoint for search

[1033] formula*form=NULL—filter function, default not specified

[1034] FilterFunction func=NULL—filter function, default not specified

[1035] description: find the nearest object to an (x, y) position at time t. Filter functions are described in Chapter 2.

[1036] FindNextNearest

[1037] TimeSpaceObject* FindNextNearest(formula *form=NULL, FilterFunction func=NULL)

[1038] parameters: formula*form=NULL—filter function, default not specified

[1039] FilterFunction func=NULL—filter function, default not specified

[1040] description: find the next nearest object

[1041] FindNearestToObject

[1042] TimeSpaceObject* FindNearestToObject(Chain *obj, double t, formula *form=NULL, FilterFunction2 func=NULL)

[1043] parameters: Chain *obj—chain pointer

[1044] double t—timepoint for search

[1045] formula*form=NULL—filter function, default not specified

[1046] FilterFunction2 func=NULL—targeted filter function, default not specified

[1047] description: find nearest object to this at time t

[1048] FindNextToObject

[1049] TimeSpaceObject* FindNextToObject(formula *form=NULL, FilterFunction2 func=NULL)

[1050] parameters: formula*form=NULL—filter function, default not specified

[1051] FilterFunction2 func=NULL—targeted filter function, default not specified

[1052] description: find next nearest object

[1053] BorderingPolygons

[1054] TSOList BorderingPolygons(TimeSpaceObject *obj, double t, formula *form=NULL, FilterFunction2 func=NULL)

[1055] parameters: TimeSpaceObject *obj—object pointer

[1056] double t—timepoint for search

[1057] formula*form=NULL—filter function, default not specified

[1058] FilterFunction2 func=NULL—targeted filter function, default not specified

[1059] description: returns all objects bordering specified object at time t

[1060] Containment and Overlap

[1061] RectQuery

[1062] TSOList RectQuery(Rect r, double t, formula *form=NULL, FilterFunction func=NULL)

[1063] parameters: Rect r—struct taking 4 doubles (xmin, ymin, xmax, ymax)

[1064] xmin—minimum×coordinate for rectangle

[1065] ymin—minimum y coordinate for rectangle

[1066] xmax—maximum×coordinate for rectangle

[1067] ymax—maximum y coordinate for rectangle

[1068] double t—timepoint for search

[1069] formula*form=NULL—filter function, default not specified

[1070] FilterFunction func=NULL—filter function, default not specified

[1071] description: returns list of objects within rectangle r

[1072] CircleQuery

[1073] TSOList CircleQuery(double x, double y, double r, double t, formula *form=NULL, FilterFunction func=NULL)

[1074] parameters: double x—X coordinate of circle center

[1075] double y—Y coordinate of circle center

[1076] double r—radius of circle

[1077] double t—timepoint for search

[1078] formula*form=NULL—filter function, default not specified

[1079] FilterFunction func=NULL—filter function, default not specified

[1080] description: returns list of objects within the circle at time t

[1081] PolygonContainmentQuery

[1082] TSOList PolygonContainmentQuery(const BasicPolygon &poly, double t, formula *form=NULL, FilterFunction func=NULL)

[1083] parameters: const BasicPolygon &poly—polygon pointer

[1084] double t—timepoint for search

[1085] formula*form=NULL—filter function, default not specified

[1086] FilterFunction func=NULL—filter function, default not specified

[1087] description: lists TimeSpaceObjects contained within polygon at time t. The basic polygon must be simple, i.e. one that does not overlap itself

[1088] PolygonOverlapQuery

[1089] TSOList PolygonOverlapQuery(const BasicPolygon &poly, double t, formula *form=NULL, FilterFunction func=NULL)

[1090] parameters: const BasicPolygon & poly—polygon pointer

[1091] double t—timepoint for search

[1092] formula*form=NULL—filter function, default not specified

[1093] FilterFunction func=NULL—filter function, default not specified

[1094] description: lists TimeSpaceObjects that intersect or that are contained within the polygon at time t. The basic polygon must be simple, i.e. one that does not overlap itself

[1095] Attribute and Time Queries

[1096] AttributeQuery

[1097] TSOList AttributeQuery(formula *form=NULL, FilterFunction func=NULL)

[1098] parameters: formula*form=NULL—filter function, default not specified

[1099] FilterFunction func=NULL—filter function, default not specified

[1100] description: lists all objects meeting the specified attributes

[1101] TimeIntervalQuery

[1102] TSOList TimeIntervalQuery(double t1, double t2, formula *form=NULL, FilterFunction func=NULL)

[1103] parameters: double t1—time interval start

[1104] double t2—time interval end

[1105] formula*form=NULL—filter function, default not specified

[1106] FilterFunction func NULL—filter function, default not specified

[1107] description: lists all objects existing within time interval

[1108] Collisions

[1109] ObjectCollisions

[1110] TSOList ObjectCollisions(TimeSpaceObject *obj, double t1, double t2, formula *form=NULL, FilterFunction2 func=NULL)

[1111] parameters: TimeSpaceObject *obj—object pointer

[1112] double t1—search start time

[1113] double t2—search end time

[1114] formula*form=NULL—filter function, default not specified

[1115] FilterFunction2 func=NULL—targeted filter function, default not specified

[1116] description: lists objects that collide with specified TimeSpaceObject during time interval

[1117] ChainCollisions

[1118] ChainList ChainCollisions(Chain *chain, double t1, double t2, formula *form=NULL, FilterFunction2 func=NULL)

[1119] parameters: Chain *chain—chain pointer

[1120] double t1—search start time

[1121] double t2—search end time

[1122] formula*form NULL—filter function, default not specified

[1123] FilterFunction2 func=NULL—targeted filter function, default not specified

[1124] description: lists chains that collide with specified chain during specified time interval

[1125] AllCollisions

[1126] ChainList AllCollisions(double t1, double t2, formula *form=NULL, FilterFunction2 func=NULL)

[1127] parameters: double t1—search start time

[1128] double t2—search end time

[1129] formula*form=NULL—filter function, default not specified

[1130] FilterFunction2 func=NULL—targeted filter function, default not specified

[1131] description: lists all collisions that occur within the time interval

[1132] Close Calls

[1133] CloseCalls

[1134] ChainList CloseCalls(Chain *chain, double t1, double t2, double threshold, formula *form=NULL, FilterFunction2 func=NULL)

[1135] parameters: Chain *chain—chain pointer

[1136] double t1—search start time

[1137] double t2—search end time

[1138] double threshold—threshold distance

[1139] formula*form=NULL—filter function, default not specified

[1140] FilterFunction2 func=NULL—targeted filter function, default not specified

[1141] description: lists objects that come within threshold distance of specified chain within time interval

[1142] CloseCallsToObject

[1143] TSOList CloseCallsToObject(TimeSpaceObject *obj, double t1, double t2, double threshold, formula *form=NULL, FilterFunction2 func=NULL)

[1144] parameters: TimeSpaceObject *obj—object pointer

[1145] double t1—search start time

[1146] double t2—search end time

[1147] double threshold—threshold distance

[1148] formula*form=NULL—filter function, default not specified

[1149] FilterFunction2 func=NULL—targeted filter function, default not specified

[1150] description: lists objects that have close calls with TimeSpaceObject within specified time interval, called by CloseCallsClass Epidemiology

[1151] 13. public STIS

[1152] enum eventDir {previousEvts, followingEvts, aroundEvts}

[1153] parameters: previousEvts—specifies the n events previous to the focal event

[1154] followingEvts—specifies the n events following the focal event

[1155] aroundEvts—specifies the n events closest in time to the focal event, regardless of position before or after the event

[1156] description: an integral variable used within Epidemiology for queries. It is used for specifying which of the three possible ways of identifying nearest events is requested

[1157] constructors

[1158] Epidemiology( )

[1159] takes no parameters

[1160] description: default constructor

[1161] Epidemiology(fstream &f)

[1162] parameters: fstream &f—pointer to fstream location

[1163] description: creates Epidemiology object from memory

[1164] virtual ˜Epidemiology( )

[1165] takes no parameters

[1166] description: Epidemiology object destructor

[1167] public methods

[1168] ConstructDiagnosisList

[1169] void ConstructDiagnosisList(const ChainVector &, formula *str)

[1170] void ConstructDiagnosisList(const ChainVector &, FilterFunction func)

[1171] parameters: const ChainVector &—pointer to the ? formula *str—filter function FilterFunction func—filter function

[1172] description: two methods for constructing a chronological list of patients with a specific diagnosis (specified by a formula or a filter function)

[1173] FindExposed

[1174] ChainList FindExposed(Chain *Mary, double t1, double t2, double threshold, double contactDuration, formula *form=NULL, FilterFunction2 func=NULL)

[1175] parameters: Chain*Mary—pointer to infective chain

[1176] double t1—search start time

[1177] double t2—search end time

[1178] double threshold—threshold distance for exposure

[1179] double contactDuration—minimum time of contact for exposure

[1180] formula*form=NULL—filter function, default not specified

[1181] FilterFunction2 func=NULL—targeted filter function, default not specified

[1182] description: finds all chains exposed to infective individual within specified time interval

[1183] NearestDiagnoses

[1184] TSOList NearestDiagnoses(double t, int count, eventDir dir)

[1185] parameters: double t—time to search

[1186] int count—the number of objects to return

[1187] eventDir dir—the type of nearest objects (see enum at beginning of class Epidemiology)

[1188] description: list diagnoses nearest in time

[1189] Get functions

[1190] GetDiagnosisCount

[1191] long GetDiagnosisCount( )

[1192] takes no parameters

[1193] description: returns count of chains with a particular diagnosis

[1194] GetFirstDiagnosis

[1195] TimeSpaceObject* GetFirstDiagnosis( )

[1196] takes no parameters

[1197] description: returns first diagnosis on diagnosis list, diagnosis list is arranged chronologically

[1198] GetDiagnoses

[1199] TSOList GetDiagnoses(double t1, double t2, formula *form=NULL, FilterFunction func=NULL);

[1200] parameters: double t1—search start time

[1201] double t2—search end time

[1202] formula*form=NULL—filter function, default not specified

[1203] FilterFunction func=NULL—filter function, default not specified

[1204] description: returns all diagnoses within time interval

[1205] GetExposureTime

[1206] double GetExposureTime(Chain *Mary, double t1, double t2, double threshold, formula *form=NULL, FilterFunction2 func=NULL)

[1207] parameters: Chain*Mary—pointer to infective chain

[1208] double t1—search start time

[1209] double t2—search end time

[1210] double threshold—threshold distance for exposure

[1211] formula*form=NULL—filter function, default not specified

[1212] FilterFunction2 func=NULL—targeted filter function, default not specified

[1213] description: returns the cumulative time of exposure between an individual chain and all other objects within time interval (can be filtered to return only chains with different diagnosis from target chain)

[1214] GetAdjacentWaitingTimes

[1215] list<double> GetAdjacentWaitingTimes(double t1, double t2)

[1216] parameters: double t1—search start time

[1217] double t2—search end time

[1218] description: Once the diagnosis list has been constructed

[1219] (ConstructDiagnosisList), waiting times between health events can be found. The next three methods return waiting times in different formats. GetAdjacentWaitingTimes returns the waiting times between events adjacent on the diagnosis list.

[1220] GetAdjacentDistanceWTPairs

[1221] list<double> GetAdjacentDistanceWTPairs(double t1, double t2)

[1222] parameters: double t1—search start time

[1223] double t2—search end time

[1224] description: lists waiting times and the distances between events adjacent on the diagnosis list in the specified time interval

[1225] GetAllDistanceWTPairs

[1226] list<double> GetAllDistanceWTPairs(double t1, double t2)

[1227] parameters: double t1—search start time

[1228] double t2—search end time

[1229] description: lists the distances and waiting times between all events on the diagnosis list within the specified time interval. This method is different from GetAdjacentDistanceWTPairs because it lists every possible pairwise combination of events on the diagnosis list (comparing event 1 with events 2-10, event 2 with 1 and 3-10, etc.)

[1230] GetEpidemicCurveData

[1231] void GetEpidemicCurveData(double t1, double t2, int bins, vector<double>&)

[1232] parameters: double t1—search start time

[1233] double t2—search end time

[1234] int bins—the number of divisions, or the resolution, on time axis

[1235] vector<double> &—vector of bar heights for histogram

[1236] description: gets data required to draw an epidemic curve based on the current diagnosis for a specified time interval. The y-axis describes the incidence rate, the number of disease events divided by the susceptible person-time. Generally, an approximation is used, the proportion of susceptible people infected. This approximation counts people infected during the interval as infected for the numerator and susceptible for the entire denominator. With the temporal information in STroodle data, we can calculate the actual incidence rate, dividing the number of events by the susceptible person time in the interval. The x-axis divides the specified time interval equally into the number of bins specified.

[1237] 14. Class TRTree

[1238] constructors

[1239] TRTree( )

[1240] takes no parameters

[1241] description: default constructor

[1242] TRTree(NRect bounds)

[1243] parameters: NRect—ToodlePip object, a rectangle with an unchanging position over time does it have a specified time interval?

[1244] description: makes a Hilbert R-tree of all objects and chains within the NRect

[1245] ˜TRTree( )

[1246] takes no parameters

[1247] description: TRTree destructor

[1248] public methods

[1249] Get Functions

[1250] GetSize

[1251] long GetSize( )

[1252] takes no parameters

[1253] description: returns the number of objects in the Hilbert R-tree

[1254] GetAllChains

[1255] ChainList GetAllChains( )

[1256] takes no parameters

[1257] description: gets the list of all chains in Hilbert R-tree

[1258] GetAllObjects

[1259] TSOList GetAllObjects(formula *form=NULL, FilterFunction func=NULL)

[1260] parameters: formula*form=NULL—filter function, default not specified

[1261] FilterFunction func=NULL—filter function, default not specified

[1262] description: gets all objects in chain, can be filtered

[1263] GetAllObjectsAtTime

[1264] TSOList GetAllObjectsAtTime(double t, formula *form=NULL, FilterFunction func=NULL)

[1265] parameters: double t—time

[1266] formula*form=NULL—filter function, default not specified

[1267] FilterFunction func=NULL—filter function, default not specified

[1268] description: finds all objects in Hilbert R-tree at time t, can be filtered

[1269] Proximity

[1270] BorderingPolygons

[1271] TSOList BorderingPolygons(TimeSpaceObject *obj, double t, formula *form=NULL, FilterFunction2 func=NULL)

[1272] parameters: TimeSpaceObject *obj—object pointer

[1273] double t—timepoint of search

[1274] formula*form=NULL—filter function, default not specified

[1275] FilterFunction2 func=NULL—targeted filter function, default not specified

[1276] description: finds all polygons bordering specified object at time, can be filtered

[1277] FindFirstNearest

[1278] TimeSpaceObject* FindFirstNearest(double x, double y, double t, formula *form=NULL, FilterFunction func=NULL)

[1279] parameters: double x—X coordinate

[1280] double y—Y coordinate

[1281] double t—timepoint

[1282] formula* form NULL—filter function, default not specified

[1283] FilterFunction func=NULL—filter function, default not specified

[1284] description: finds nearest object to 2 specified time—space coordinates

[1285] FindNext

[1286] TimeSpaceobject* FindNext(formula *form=NULL, FilterFunction func=NULL)

[1287] parameters: formula*form=NULL—filter function, default not specified

[1288] FilterFunction func=NULL—filter function, default not specified

[1289] description: finds next nearest object

[1290] FindFirstNearestToObject

[1291] TimeSpaceObject* FindFirstNearestToObject(Chain *obj, double t, formula *form=NULL, FilterFunction2 func=NULL)

[1292] parameters: Chain *obj—chain pointer

[1293] double t—timepoint

[1294] formula*form=NULL—filter function, default not specified

[1295] FilterFunction2 func=NULL—targeted filter function, default not specified

[1296] description: finds nearest object to specified chain at time t, can be filtered

[1297] FindNextToObject

[1298] TimeSpaceObject* FindNextToObject(formula *form=NULL, FilterFunction2 func=NULL)

[1299] parameters: formula*form NULL—filter function, default not specified

[1300] FilterFunction2 func=NULL—targeted filter function, default not specified

[1301] description: finds next nearest object to specified chain at time t, can be filtered

[1302] Containment and Overlap RectQuery

[1303] TSOList RectQuery(Rect r, double t, formula *form=NULL, FilterFunction func=NULL)

[1304] parameters: Rect r—struct taking 4 doubles (xmin, ymin, xmax, ymax)

[1305] xmin—minimum x coordinate for rectangle

[1306] ymin—minimum y coordinate for rectangle

[1307] xmax—maximum x coordinate for rectangle

[1308] ymax—maximum y coordinate for rectangle

[1309] double t—timepoint for search

[1310] formula*form NULL—filter function, default not specified

[1311] FilterFunction func=NULL—filter function, default not specified

[1312] description: returns list of objects within rectangle r

[1313] CircleQuery

[1314] TSOList CircleQuery(double x, double y, double r, double t, formula *form—NULL, FilterFunction func=NULL)

[1315] parameters: double x—X coordinate of circle center

[1316] double y—Y coordinate of circle center

[1317] double r—radius of circle

[1318] double t—timepoint for search

[1319] formula*form=NULL—filter function, default not specified

[1320] FilterFunction func=NULL—filter function, default not specified

[1321] description: returns list of objects within the specified circle at time t

[1322] PolygonOverlapQuery

[1323] TSOList PolygonOverlapQuery(const BasicPolygon &poly, double t, formula *form=NULL, FilterFunction func=NULL)

[1324] parameters: const BasicPolygon &poly—polygon pointer

[1325] double t—timepoint for search

[1326] formula*form NULL—filter function, default not specified

[1327] FilterFunction func=NULL—filter function, default not specified

[1328] description: lists TimeSpaceObjects that intersect or that are contained within the polygon at time t. The basic polygon must be simple, i.e. one that does not overlap itself

[1329] PolygonContainmentQuery

[1330] TSOList PolygonContainmentQuery(const BasicPolygon &poly, double t, formula *form=NULL, FilterFunction func=NULL)

[1331] parameters: BasicPolygon &—polygon pointer

[1332] double t—timepoint

[1333] formula*form=NULL—filter function, default not specified

[1334] FilterFunction func=NULL—filter function, default not specified

[1335] description: creates a list objects contained within the polygon at time t. The basic polygon must be simple, i.e. one that does not overlap itself

[1336] TimeIntervalQuery

[1337] TSOList TimeIntervalQuery(double t1, double t2, formula *form=NULL, FilterFunction func=NULL)

[1338] parameters: double t1—time interval start

[1339] double t2—time interval end

[1340] formula*form NULL—filter function, default not specified

[1341] FilterFunction func=NULL—filter function, default not specified

[1342] description: lists all objects existing within time intervalCollisions

[1343] ChainCollisions

[1344] ChainList ChainCollisions(Chain *obj, double t1, double t2, formula *form=NULL, FilterFunction2 func=NULL)

[1345] parameters: Chain *obj—chain pointer

[1346] double t1—beginning of time interval

[1347] double t2—end of time interval

[1348] formula*form=NULL—filter function, default not specified

[1349] FilterFunction2 func=NULL—targeted filter function, default not specified

[1350] description: returns list of all chains that collide with specified chain during the time interval

[1351] ObjectCollisions

[1352] TSOList ObjectCollisions(TimeSpaceObject *obj, double t1, double t2, formula *form=NULL, FilterFunction2 func=NULL)

[1353] parameters: TimeSpaceObject *obj—object pointer

[1354] double t1—beginning of time interval

[1355] double t2—end of time interval

[1356] formula*form=NULL—filter function, default not specified

[1357] FilterFunction2 func=NULL—targeted filter function, default not specified

[1358] description: returns list of all objects that collide with specified object during the time interval

[1359] AllCollisions

[1360] ChainList AllCollisions(double t1, double t2, formula *form=NULL, FilterFunction func=NULL)

[1361] parameters: double t1—beginning of time interval

[1362] double t2—end of time interval

[1363] formula*form=NULL—filter function, default not specified

[1364] FilterFunction func=NULL—filter function, default not specified

[1365] description: returns list of all chains that collide during the time interval

[1366] Close Calls

[1367] CloseCalls

[1368] ChainList CloseCalls(Chain *obj, double t1, double t2, double threshold, formula *form=NULL, FilterFunction2 func=NULL)

[1369] parameters: Chain *obj—chain pointer

[1370] double t1—beginning of time interval

[1371] double t2—end of time interval

[1372] double threshold—maximum distance to qualify as a close-call

[1373] formula*form=NULL—filter function, default not specified

[1374] FilterFunction2 func=NULL—targeted filter function, default not specified

[1375] description: returns list of all chains that come within specified distance of specified chain during the time period

[1376] CloseCallsToObject

[1377] TSOList CloseCallsToObject(TimeSpaceObject *obj, double t1, double t2, double threshold, formula *form=NULL, FilterFunction2 func=NULL)

[1378] parameters: TimeSpaceObject *obj—object pointer

[1379] double t1—beginning of time interval

[1380] double t2—end of time interval

[1381] double threshold—maximum distance to qualify as a close-call

[1382] formula*form=NULL—filter function, default not specified

[1383] FilterFunction2 func NULL—targeted filter function, default not specified

[1384] description: returns list of all objects that come within specified distance of specified object during the time period

[1385] Obviously, many modifications and variations of the present invention are possible in light of the above teachings. The invention may be practiced otherwise than as specifically described within the scope of the appended claims, wherein that which is prior art is antecedent to the novelty set forth in the “characterized by” clause. The novelty is meant to be particularly and distinctly recited in the “characterized by” clause whereas the antecedent recitations merely set forth the old and well-known combination in which the invention resides. These antecedent recitations should be interpreted to cover any combination in which the incentive novelty exercises its utility. In addition, the reference numerals in the claims are merely for convenience and are not to be read in any way as limiting. 

What is claimed is:
 1. An object oriented data model for modeling an item using a computer, comprising: a data parameter; and, a time parameter, wherein an instance of the object oriented data model has a data value associated with the data parameter and a time value associated with the time parameter, the data value being associated with the instance of the item at the time value.
 2. An object oriented data model, as set forth in claim 1, wherein the time value is a discrete value.
 3. An object oriented data model, as set forth in claim 1, wherein the time value is a range of time with a start value and an end value.
 4. An object oriented data model, as set forth in claim 1, wherein the item is a biological organism.
 5. An object oriented data model, as set forth in claim 1, wherein the item is a geometric construct.
 6. An object oriented data model, as set forth in claim 5, wherein the construct is a point.
 7. An object oriented data model, as set forth in claim 5, wherein the construct is a line.
 8. An object oriented data model, as set forth in claim 5, wherein the construct is a multi-line.
 9. An object oriented data model, as set forth in claim 5, wherein the construct is a polygon.
 10. An object oriented data model, as set forth in claim 5, wherein the construct is a circle.
 11. A programming tool for modeling an object that moves through time, comprising: an object oriented data model including a data parameter and a time parameter, wherein an instance of the object oriented data model has a data value associated with the data parameter and a time value associated with the time parameter, the data value being associated with the instance of the item at the time value; a chain of instances of the object oriented data model, the plurality of instances of the object oriented data model representing the object as the object moves through time; and, a plurality of methods adapted to operate on the chain of instances of the object oriented data model.
 12. A programming tool, as set forth in claim 11, wherein the time value is a discrete value.
 13. A programming tool, as set forth in claim 11, wherein the time value is a range of time with a start value and an end value.
 14. A programming tool, as set forth in claim 11, wherein the item is a biological organism.
 15. A programming tool, as set forth in claim 11, wherein the item is a geometric construct.
 16. A programming tool, as set forth in claim 15, wherein the construct is a point.
 17. A programming tool, as set forth in claim 15, wherein the construct is a line.
 18. A programming tool, as set forth in claim 15, wherein the construct is a multi-line.
 19. A programming tool, as set forth in claim 15, wherein the construct is a polygon.
 20. A programming tool, as set forth in claim 15, wherein the construct is a circle.
 21. A programming tool, as set forth in claim 11, wherein the plurality of methods includes spatial queries.
 22. A programming tool, as set forth in claim 21, wherein the spatial queries includes at least one of a length query, area query, position query, point path query, nearest neighbor query, adjacency query, border polygons query, border length query, distance query, overlap query, and polygon containment query.
 23. A programming tool, as set forth in claim 11, wherein the plurality of methods includes network queries.
 24. A programming tool, as set forth in claim 24, wherein the network queries includes at least one of a distance query, adjacency query, nearest neighbor query, and neighbors by node query.
 25. A programming tool, as set forth in claim 11, wherein the plurality of methods includes spatial-temporal object queries.
 26. A programming tool, as set forth in claim 25, wherein the spatial-temporal object queries includes at least one of an object chain and subject query, a threshold distance query, a minimum distance query, a polygon containment interval query, a distance over time query, a collision query, a close call query, and a distance between objects over time query.
 27. A programming tool, as set forth in claim 11, wherein the object is an infectious disease.
 28. A programming tool, as set forth in claim 11, wherein the object is related to human commerce as occurs in sales, marketing and business.
 29. A programming tool, as set forth in claim 11, wherein the object is a pixel in a remotely sensed image.
 30. A programming tool, as set forth in claim 27, wherein the plurality of methods includes epidemiological queries.
 31. A programming tool, as set forth in claim 30, wherein the plurality of epidemiological queries includes event/diagnosis queries.
 32. A programming tool, as set forth in claim 31, wherein the event/diagnosis queries includes at least one of a define event query, a find first event query, a find events in interval query, a nearest events to focus event query, a nearest event to certain time query, a waiting time between pairs of events query, and a waiting time between all events query.
 33. A programming tool, as set forth in claim 30, wherein the epidemiological queries includes at least one of an exposure time query, a find exposed query, and an epidemic curve query.
 34. A computer based method of modeling items using an object oriented data model with space and time data, including: representing an item in a first instance of the data model, the data model including at least one data parameter, a value of the data parameter within the first instance of the data model being associated in time with the first instance; and, representing the item in a second instance of the data model, the value of the data parameter tracking a spatial-time event of the item in the second instance of the data model.
 35. A computer based method, as set forth in claim 34, wherein the first and second instances of the data model form a chain.
 36. A computer based method, as set forth in claim 34, wherein time data for each instance includes a discrete value.
 37. A computer based method, as set forth in claim 34, wherein the time data is a range of time with a start value and an end value.
 38. A computer based method, as set forth in claim 34, wherein the item is a biological organism.
 39. A computer based method, as set forth in claim 34, wherein the item is related to human commerce as occurs in sales, marketing, and business.
 40. A computer based method, as set forth in claim 34, wherein the item is a pixel in a remotely sensed image.
 41. A computer based method, as set forth in claim 34, wherein the item is a geometric construct.
 42. A computer based method, as set forth in claim 41, wherein the construct is a point.
 43. A computer based method, as set forth in claim 41, wherein the construct is a line.
 44. A computer based method, as set forth in claim 41, wherein the construct is a multi-line.
 45. A computer based method, as set forth in claim 41, wherein the construct is a polygon.
 46. A computer based method, as set forth in claim 41, wherein the construct is a circle.
 47. A computer based method, as set forth in claim 35, including the step of performing a method on the chain.
 48. A computer based method, as set forth in claim 35, including the step of performing a spatial query on the chain.
 49. A computer based method, as set forth in claim 47, wherein the spatial query is one of a length query, area query, position query, point path query, nearest neighbor query, adjacency query, border polygons query, border length query, distance query, overlap query, and polygon containment query.
 50. A computer based method, as set forth in claim 35, including the step of performing a network query on the chain.
 51. A computer based method, as set forth in claim 50, wherein the network query is one of a distance query, adjacency query, nearest neighbor query, and neighbors by node query.
 52. A computer based method, as set forth in claim 35, including the step of performing a spatial-temporal object query.
 53. A computer based method, as set forth in claim 52, wherein the spatial-temporal object query is one of an object chain and subject query, a threshold distance query, a minimum distance query, a polygon containment interval query, a distance over time query, a collision query, a close call query, and a distance between objects over time query.
 54. A computer based method, as set forth in claim 35, wherein the item is an infectious disease.
 55. A computer based method, as set forth in claim 54, including the step of performing an epidemiological query on the chain.
 56. A computer based method, as set forth in claim 55, wherein the epidemiological query is an event/diagnosis queries.
 57. A computer based method, as set forth in claim 56, wherein the event/diagnosis queries is one of a define event query, a find first event query, a find events in interval query, a nearest events to focus event query, a nearest event to certain time query, a waiting time between pairs of events query, and a waiting time between all events query.
 58. A computer based method, as set forth in claim 55, wherein the epidemiological query is one of an exposure time query, a find exposed query, and an epidemic curve query.
 59. A computer based method, as set forth in claim 35, wherein the item is related to human commerce as occurs in sales, marketing, and business.
 60. A computer based method, as set forth in claim 35, wherein the item is a pixel in a remotely sensed image. 